[ Поиск ] - [ Пользователи ] - [ Календарь ]
Полная Версия: Регулярные выражения php preg_match
Guest
Подскажите, правильно? Если правильно напишите пжл, что-бы быть уверенным в регулярке, если нет поправьте.

1 Номер телефона, должен состоять только из 10 цифр.

if(!preg_match("#^[0-9]{10,10}+$#", $_POST['userPhone']))



2 Email, должен состоять из 30 символов нижнего регистра.

if(!preg_match("#^[a-z\-\.]+@[a-z\-\.]+[a-z]{7,30}+$#", $_POST['userEmail']))



3 Имя или Фамилия или Отчество, должно состоять не более 20 букв (возможно - (например для двойной Фамилии), начинается с верхнего регистра, остальные буквы маленький регистр.

if(!preg_match("#^[А-я\-]{3,20}+$#", $_POST['userUser']))

killer8080
Цитата (Guest @ 21.07.2013 - 10:08)
1 Номер телефона, должен состоять только из 10 цифр.

if(!preg_match("#^[0-9]{10,10}+$#", $_POST['userPhone']))

можно поступить проще, привести значение к integer, или is_numeric(), или filter_var() с флагом FILTER_VALIDATE_INT, ну если очень хочется регуляркой, то так #^\d{10}$#. Хотя не ясно, зачем ограничивать номер телефона 10 цифрами. :)
Цитата (Guest @ 21.07.2013 - 10:08)
2 Email, должен состоять из 30 символов нижнего регистра.

if(!preg_match("#^[a-z\-\.]+@[a-z\-\.]+[a-z]{7,30}+$#", $_POST['userEmail']))

это сразу выбрасывай
if(!filter_var($_POST['userEmail'], FILTER_VALIDATE_EMAIL))

Цитата (Guest @ 21.07.2013 - 10:08)
3 Имя или Фамилия или Отчество, должно состоять не более 20 букв (возможно - (например для двойной Фамилии), начинается с верхнего регистра, остальные буквы маленький регистр.

if(!preg_match("#^[А-я\-]{3,20}+$#", $_POST['userUser']))

зачем такое ограничение?
Guest
1 - #^\d{10}$# - Спасибо, сам не подумал.

2 - это сразу выбрасывай
if(!filter_var($_POST['userEmail'], FILTER_VALIDATE_EMAIL))

Где-то читал, что Не рекомендуется filter_var, лучше говорят регулярками.

3 - Зачем такое ограничение? Надо.) Это правильно?
killer8080
Цитата (Guest @ 21.07.2013 - 11:15)
if(!filter_var($_POST['userEmail'], FILTER_VALIDATE_EMAIL))
Где-то читал, что Не рекомендуется filter_var, лучше говорят регулярками.

Это смотря какими регуляками ;) Твой вариант вообще далек от RFC, вообще люди писавщие стандарт, видимо меньше всего думали о программистах, я ещё не видел ни одной регулярки на 100% соответствующей стандарту, а те кто к нему приближаются занимают много строк кода :)
Стандарт разрешает в логине использовать почти все символы (включая @), нативная реализация фильтра все же гораздо ближе к идеалу, чем простенькие регулярки :)
Цитата (Guest @ 21.07.2013 - 11:15)
3 - Зачем такое ограничение? Надо.) Это правильно?

нет, не правильно
Во первых нельзя задавать диапазон А-я, нужно а-я или А-Я
Во вторых пропущена буква Ё
В третьих лишний квантификатор "+"
'#^[а-яё-]{3,20}$#i'

Если юникод, то добавь модификатор u
Guest
3

if(!preg_match("#^[а-я\-]{3,20}+$#", $_POST['userUser']))


Куда поставить ё?



killer8080
Цитата (Guest @ 21.07.2013 - 11:56)
Куда поставить ё?

Так я ж уже показал rolleyes.gif
AlmazDelDiablo
preg_match("#^[а-яё\-]{3,20}+$#ui", $_POST['userUser'])


Вообще, сайты, где введены такие жесткие ограничения, должны гореть адским пламенем. Для пользователя должна быть максимальная свобода. Если он хочет ввести фейковые данные — он их введет и при всех ограничениях. А вот человек, например, с фамилией из двух букв уже не сможет у вас зарегистрироваться (а фамилии из двух букв, хотя и редки, но всё же существуют). Или человек с двойной фамилией из более чем двадцати букв.

_____________
Блог | VK | GitHub | Twitch
Guest
Цитата (AlmazDelDiablo @ 21.07.2013 - 13:03)
preg_match("#^[а-яё\-]{3,20}+$#ui", $_POST['userUser'])


Вообще, сайты, где введены такие жесткие ограничения, должны гореть адским пламенем. Для пользователя должна быть максимальная свобода. Если он хочет ввести фейковые данные — он их введет и при всех ограничениях. А вот человек, например, с фамилией из двух букв уже не сможет у вас зарегистрироваться (а фамилии из двух букв, хотя и редки, но всё же существуют). Или человек с двойной фамилией из более чем двадцати букв.

Жесткие ограничения (До этого поработает функция, которая преобразует в нижний регистр.)

Не знаю ни одну фамилию из 2 символов или более 20. Привидите пример и какое минимальное и максимальное значение Вы можете посоветовать?
Guest
Цитата (killer8080 @ 21.07.2013 - 12:37)
Это смотря какими регуляками wink.gif Твой вариант вообще далек от RFC, вообще люди писавщие стандарт, видимо меньше всего думали о программистах, я ещё не видел ни одной регулярки на 100% соответствующей стандарту, а те кто к нему приближаются занимают много строк кода smile.gif


Я так понимаю, если не видели, то знаете как правильно.

Напишите пжл.
rooor
Цитата
Не знаю ни одну фамилию из 2

Брюс Ли smile.gif
Цитата
или более 20

не забывайте про двойные фамилии, например, Космодемьянская-Соколова
Guest
if(!preg_match("#^[а-я\-]{2,30}$#", $_POST['userUser']))


Теперь должно быть правильно, символ - правильно будет обрабатываться?
Быстрый ответ:

 Графические смайлики |  Показывать подпись
Здесь расположена полная версия этой страницы.
Invision Power Board © 2001-2025 Invision Power Services, Inc.