@targetologru

Как правильно составить шаблон регулярного выражения?

В общем, нужно проверять url-адрес на профиль ВКонтакте.

Может быть (или не быть) одна точка, сколько угодно знаков подчеркивания, английских букв и цифр, длина строки от 2 до 33 символов включительно, не считая начала https://vk.com/.

Я вот сделал вот так, но оно не работает, в общем-то.
Например, строка "https://vk.com/abc..." считается валидной.

preg_match('#^https://vk.com/[\d\D_(\.?)]{2,33}$#i', $_POST['source'])


И вот так пробовал:
preg_match('#^https://vk.com/[(\d)*(\D)*(\.)?(_)*]{2,33}$#i', $_POST['source'])


Как правильно сделать такую проверку? В идеале, было бы еще добавить, чтобы символы . и _ не могли быть в начале шаблона и в конце, и чтобы они не стояли рядом типа вот так: abc__abc.
  • Вопрос задан
  • 253 просмотра
Решения вопроса 1
Rsa97
@Rsa97
Для правильного вопроса надо знать половину ответа
Например, так:
^https://vk.com/[a-z0-9]+(?:_[a-z0-9]+)*(?:\.[a-z0-9]+(?:_[a-z0-9]+)*)?$

А на длину лучше проверять через strlen()
Ответ написан
Пригласить эксперта
Ответы на вопрос 1
@ant2015
По идее так
preg_match('#^(http|https)://vk.com/[a-zA-Z0-9]{2,33}$#i', $_POST['source'])

Первый и последний символ можно просто проверять оператором ветвления if-else и стандартной функцией substr. Заодно проверять недопустимые слова в строке (club для сообществ и т.д.)
Ответ написан
Комментировать
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы