Непонятно с регуляркой

Аяяйка

Новичок
Непонятно с регуляркой

Привет всем!

Подскажите, почему срабатывает первая ветвь echo "Все верно";
может я не все понимаю, но вот это условие [0-9a-z_]+ должно искать в строке только цифры и лат буквы?


PHP:
$email = "som\e#[email protected]";
$pattern = "|[0-9a-z_]+@[0-9a-z_^\.]+\.[a-z]{2,3}|i";

if (preg_match($pattern, $email))
{
    echo "Все верно";

}
else
{
    echo "Неверный емайл";
}
 

Вурдалак

Продвинутый новичок
Не указаны границы, вот и результат. preg_match() не проверяет соответствие строки шаблону, а лишь пытается найти в этой строке подстроку, удовлетворяющую шаблону.
 

freeek

Новичок
если представить, что строка содержащаяимэйл, является полностью имэйлом и надо проверить его верность

PHP:
$pattern = "|^[0-9a-z_]+@[0-9a-z_^\.]+\.[a-z]{2,3}|i";
достаточно начать проверку с начала строки, в этом случае получите то, что по всей видимости ожидаете

а иначе, в первоначальном варианте, рега находит [email protected], о чем было пояснено постом выше
 

Вурдалак

Продвинутый новичок
Автор оригинала: freeek
PHP:
$pattern = "|^[0-9a-z_]+@[0-9a-z_^\.]+\.[a-z]{2,3}|i";
достаточно начать проверку с начала строки, в этом случае получите то, что по всей видимости ожидаете
— а конец?
 

freeek

Новичок
да, надо было добавить конец
просто акцентировал саму идею, сегодня мыло, завтро еще что то
 

c0dex

web.dev 2002-...
Команда форума
Партнер клуба
а если доменная зона с 4 символов? info/name/museum?
 
Сверху