Нужно определить, является ли переданная строка доменом.
Массив строк:
$arr[] = 'site.ru';
$arr[] = 'site.com';
$arr[] = 'my-site.com';
$arr[] = 'my-cool-site.com';
$arr[] = 'my_site.com';
$arr[] = 'site123.com';
$arr[] = 'site.travel';
$arr[] = 'si$te.com';
$arr[] = 'site.r';
$reg = '#[a-z0-9]+[_-]?[a-z0-9]+\.[a-z]{2,}#';
foreach ($arr as $str) {
echo $str . ' - ' . preg_match($reg, $str) . '<br>';
}
В результате получается:
site.ru - 1
site.com - 1
my-site.com - 1
my-cool-site.com - 1
my_site.com - 1
site123.com - 1
site.travel - 1
si$te.com - 1
site.r - 0
Почему строка
$arr[] = 'si$te.com';
определяется как доменное имя?
И почему если в регулярном выражении удалить тире и нижнее подчеркивание, то всё будет работать точно так же?
$reg = '#[a-z0-9]+\.[a-z]{2,}#';