2010-03-18 4 views
0

Мне было интересно, правильные ли коды, чтобы проверить адрес, адрес электронной почты, пароль, город и URL, используя preg_match, используя регулярные выражения?Вопрос о PHP и регулярных выражениях?

И если нет, то как мне исправить код preg_match?

preg_match ('/^[A-Z0-9 \'.-]{1,255}$/i', $trimmed['address']) //street address 
preg_match ('/^[\w.-][email protected][\w.-]+\.[A-Za-z]{2,6}$/', $trimmed['email'] //email address 
preg_match ('/^\w{4,20}$/', $trimmed['password']) //password 
preg_match ('/^[A-Z \'.-]{1,255}$/i', $trimmed['city']) //city 
preg_match("/^[a-zA-Z]+[:\/\/]+[A-Za-z0-9\-_]+\\.+[A-Za-z0-9\.\/%&=\?\-_]+$/i", $trimmed['url']) //url 

ответ

1

Ваш почтовый адрес: ^[A-Z0-9 \'.-]{1,255}$

  • вам не нужно избежать одинарные кавычки.
  • , так как у вас есть dot в char класс, он разрешит все символы (кроме ). Так эффективны ваши регулярные выражения становится ^.{1,255}$
  • вы позволяете ему быть мин длина 1 и не более длины 255. Я хотел бы предложить вам увеличить МИН длину нечто большее, чем 1.

Ваш адрес электронной почты регулярное выражение: ^[\w.-][email protected][\w.-]+\.[A-Za-z]{2,6}$

  • снова вы имеете . в полукокса класса. исправить это.

Ваш пароль регулярное выражение: ^\w{4,20}$

  • позволяет получить PASSWD длиной от 4 до 20 и может содержать только буквы (верхний и нижний ), цифры и подчеркивания. Я бы посоветовал вам дополнительно ввести .Чтобы сделать ваш пароль сильнее.

Ваш город регулярное выражение: ^[A-Z \'.-]{1,255}$

  • имеет в полукокса класса
  • . позволяет мин длину 1 (если вы хотите, чтобы города длиной 1 полукокса это штраф).

EDIT:

Поскольку вы новичок в Regex, потратить некоторое время на Regular-Expressions.info

+0

Вы как-то потеряли меня в своем объяснении, это мой первый день, пытаясь выучить регулярные выражения. – php

0

Там не совсем «правильный» способ проверить любой из этих вещей. Это зависит от ваших требований.

Для адресов электронной почты и URL-адресов я рекомендую использовать filter_var вместо регулярных выражений - просто передайте его FILTER_VALIDATE_EMAIL или FILTER_VALIDATE_URL.

С другими регулярными выражениями вам необходимо убедиться, что вы убегаете. внутри классов персонажей (в противном случае это позволит все), и вы можете подумать, что городские/уличные могут разрешить мусор, такой как ''''', или просто пробельные символы.

0

Пожалуйста, не предполагайте, что вы знаете, как сконфигурирован адрес. Есть тысячи городов, поселков и деревень с такими символами, как & и другими алфавитами.

Просто НЕ пытайтесь проверять адрес, если вы не делаете это через API, специфичный для страны (например, USPS для США).

И почему вы хотите ограничить символы паролем пользователей? У вас нет ЛЮБЫХ требований к паролю, кроме существующих.

Ваш сайт будет непригодным для использования, если вы используете это регулярное выражение.

1

Это кажется слишком сложным для меня. В частности, я могу видеть несколько вещей, которые не будут работать:

  1. Ваше регулярное выражение будет обязательно для городов с не-ASCII букв в их именах, таких как «Malmö» или 서울 и т.д.
  2. Ваш пароль валидатор не допускает пробелов в пароле (что полезно для ввода паролей), оно даже не допускает цифр или знаков препинания, которые многие люди хотели бы добавить в свои пароли для дополнительной безопасности.
  3. Вы обращаетесь валидатор не позволит людям, которые живут в квартирах (12/345 Foo St)

(это если вы имели в виду «\.» Вместо «», так как «» соответствует любому)

И так далее. В общем, я считаю, что чрезмерная зависимость от регулярных выражений для проверки не является хорошей вещью. Вы, вероятно, лучше разрешаете что-либо для этих полей и просто проверяете их каким-либо другим способом.

Например, с адресами электронной почты: только потому, что адрес действителен в соответствии с стандартом RFC, не означает, что вы действительно сможете отправить ему электронное письмо (или что это правильный адрес адрес электронной почты для человека). Единственный надежный способ проверки адреса электронной почты - фактически отправить ему электронное письмо и заставить человека щелкнуть ссылку или что-то еще.

То же самое с URL-адресами: только потому, что оно действительно в соответствии со стандартом, на самом деле не означает, что там есть веб-страница. Вы можете проверить URL-адрес, пытаясь выполнить фактический запрос на выбор страницы.

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

Смежные вопросы