По идее так
preg_match('#^(http|https)://vk.com/[a-zA-Z0-9]{2,33}$#i', $_POST['source'])
Первый и последний символ можно просто проверять оператором ветвления if-else и стандартной функцией substr. Заодно проверять недопустимые слова в строке (club для сообществ и т.д.)