Регулярное выражение для соответствия поддомену домена

#php #regex #preg-match

#php #регулярное выражение #preg-match

Вопрос:

Базовый URL для сопоставления — http://testdomain.com .

Условие для выполнения- url "could" contain a subdomain from 3 to 10 characters length, for example: http://sub.testdomain.com

У меня есть это прямо сейчас-

 $string = 'http://testdomain.com';
if(preg_match('/^(http)://(([a-z]{3,10})?[.])?(testdomain.com)/i', $string)) {
      echo 'Good';
} else {
     echo 'Bad';
}
 

Вышеуказанное условие http://.testdomain.com также соответствует, что было бы неверно.

Итак, поддомен (‘sub’ в http://sub.testdomain.com ), если таковой имеется, должен иметь длину от 3 до 10 символов и сопровождаться символом . и затем testdomain.com

Ответ №1:

Как насчет того, чтобы сделать всю часть поддомена необязательной с использованием нулевого или множественного соответствия * . Это будет соответствовать как обычному домену, так и поддомену, но не с отдельным . символом для части поддомена. СМ.

 https?://([a-z0-9] [.])*testdomain[.]com

$re = '/https?://([a-z0-9] [.])*testdomain[.]com/i';
$str = ' http://testdomain.com
http://.testdomain.com
http://sub.testdomain.com';

preg_match_all($re, $str, $matches, PREG_SET_ORDER, 0);

// Print the entire match result
var_dump($matches);
 

Комментарии:

1. Это указало мне в правильном направлении. Я использую? вместо *. https?://([a-z0-9] [.])?тестовый домен[.]com Спасибо.