Warning: Cannot use a scalar value as an array in /home/admin/public_html/forum/include/fm.class.php on line 757

Warning: Invalid argument supplied for foreach() in /home/admin/public_html/forum/include/fm.class.php on line 770
Форумы портала PHP.SU :: Версия для печати :: Регулярные выражения
Форумы портала PHP.SU » PHP » Регулярные выражения » Регулярные выражения

Страниц (1): [1]
 

1. Prowler - 12 Декабря, 2012 - 13:30:23 - перейти к сообщению
Доброго времени суток. Вот, никогда не использовал регулярки, только "подозревал" о их существовании... тут начинаю писать крупный проект, параллельно углубленно изучая пхп. И вот для защиты от передачи недостоверных данных решил юзать регулярки, в связи с чем вопрос(ы) и возникли. Начну с того как проверить валидность написание емыла(не беру готовое - надо научиться и понять что к чему).
Адрес электронной почты состоит из имени пользователи и домена, которые разделены между собой символом "@". Имя пользователя не должно начинаться с символов "-","_" и прочее. Итак, по моему разумению это выглядит так:

т.е. эта маска должна начинаться с заглавных, прописных букв или цифр количеством от 1 и больше, после чего идут любые символы в количистве от 0 и больше, после чего идет символ "@".
Тут все верно или рассуждения не верны?
А вот со второй частью сладить совсем не могу. Нужно обязательное наличие хотя бы одной точки. А если их много... подскажите, пожалуйста, как быть?
2. sKaa - 12 Декабря, 2012 - 13:34:33 - перейти к сообщению
[A-Za-z0-9]+ - любые символы из набора A-Z и a-z и от 0 до 9, + означает, что должен быть минимум 1 символ из этого набора. Тут где-то мелькали ссылки для изучения регулярок.
http://phpclub[dot]ru/detail/article/regexp_1
http://phpclub[dot]ru/detail/article/regexp_2
3. Мелкий - 12 Декабря, 2012 - 13:35:11 - перейти к сообщению
email проверять довольно зубодробительно будет.
PHP:
скопировать код в буфер обмена
  1. filter_var('bob@example.com', FILTER_VALIDATE_EMAIL)


А так, чтобы ужаснуться, по RFC2822: http://regularexpressionsrightno[dot][dot][dot]expressions/139/ выглядит так:
CODE (text):
скопировать код в буфер обмена
  1. (?:[a-z0-9!#$%&'*+/=?^_`{|}~-]+(?:\.[a-z0-9!#$%&'*+/=?^_`{|}~-]+)*|”(?:[\x01-\x08\x0b\x0c\x0e-\x1f\x21\x23-\x5b\x5d-\x7f]|\\[\x01-\x09\x0b\x0c\x0e-\x7f])*”)@(?:(?:[a-z0-9](?:[a-z0-9-]*[a-z0-9])?\.)+[a-z0-9](?:[a-z0-9-]*[a-z0-9])?|\[(?:(?:25[0-5]|2[0-4][0-9]|[01]?[0-9][0-9]?)\.){3}(?:25[0-5]|2[0-4][0-9]|[01]?[0-9][0-9]?|[a-z0-9-]*[a-z0-9]:(?:[\x01-\x08\x0b\x0c\x0e-\x1f\x21-\x5a\x53-\x7f]|\\[\x01-\x09\x0b\x0c\x0e-\x7f])+)\])

(Добавление)
А непосредственно filter_var использует такую PCRE-регулярку:
CODE (text):
скопировать код в буфер обмена
  1. /^(?!(?:(?:\\x22?\\x5C[\\x00-\\x7E]\\x22?)|(?:\\x22?[^\\x5C\\x22]\\x22?)){255,})(?!(?:(?:\\x22?\\x5C[\\x00-\\x7E]\\x22?)|(?:\\x22?[^\\x5C\\x22]\\x22?)){65,}@)(?:(?:[\\x21\\x23-\\x27\\x2A\\x2B\\x2D\\x2F-\\x39\\x3D\\x3F\\x5E-\\x7E]+)|(?:\\x22(?:[\\x01-\\x08\\x0B\\x0C\\x0E-\\x1F\\x21\\x23-\\x5B\\x5D-\\x7F]|(?:\\x5C[\\x00-\\x7F]))*\\x22))(?:\\.(?:(?:[\\x21\\x23-\\x27\\x2A\\x2B\\x2D\\x2F-\\x39\\x3D\\x3F\\x5E-\\x7E]+)|(?:\\x22(?:[\\x01-\\x08\\x0B\\x0C\\x0E-\\x1F\\x21\\x23-\\x5B\\x5D-\\x7F]|(?:\\x5C[\\x00-\\x7F]))*\\x22)))*@(?:(?:(?!.*[^.]{64,})(?:(?:(?:xn--)?[a-z0-9]+(?:-+[a-z0-9]+)*\\.){1,126}){1,}(?:(?:[a-z][a-z0-9]*)|(?:(?:xn--)[a-z0-9]+))(?:-+[a-z0-9]+)*)|(?:\\[(?:(?:IPv6:(?:(?:[a-f0-9]{1,4}(?::[a-f0-9]{1,4}){7})|(?:(?!(?:.*[a-f0-9][:\\]]){7,})(?:[a-f0-9]{1,4}(?::[a-f0-9]{1,4}){0,5})?::(?:[a-f0-9]{1,4}(?::[a-f0-9]{1,4}){0,5})?)))|(?:(?:IPv6:(?:(?:[a-f0-9]{1,4}(?::[a-f0-9]{1,4}){5}:)|(?:(?!(?:.*[a-f0-9]:){5,})(?:[a-f0-9]{1,4}(?::[a-f0-9]{1,4}){0,3})?::(?:[a-f0-9]{1,4}(?::[a-f0-9]{1,4}){0,3}:)?)))?(?:(?:25[0-5])|(?:2[0-4][0-9])|(?:1[0-9]{2})|(?:[1-9]?[0-9]))(?:\\.(?:(?:25[0-5])|(?:2[0-4][0-9])|(?:1[0-9]{2})|(?:[1-9]?[0-9]))){3}))\\]))$/iD

 

Powered by ExBB FM 1.0 RC1