Это хорошо, потому что вы можете использовать регулярные выражения для простого выражения и тестирования сложных шаблонов.
Это плохо, потому что регулярные выражения могут быть сложными, и вы многое можете сделать неправильно.
Редактировать Ну и ладно. Вот несколько реальных советов: во-первых, убедитесь, что ожидаемые действительные значения могут быть выражены с помощью регулярного выражения вообще. То есть когда язык допустимых значений - обычный язык . В противном случае вы просто не сможете использовать регулярные выражения (или, по крайней мере, не только регулярные выражения)!
Теперь, когда мы знаем, что может быть проверено с помощью регулярных выражений, мы должны обсудить, что может быть проверено с помощью регулярных выражений. Если мы возьмем в качестве примера адрес электронной почты (как и многие другие), мы должны знать, как может выглядеть действительный адрес электронной почты (см. RFC 5322):
addr-spec = local-part "@" domain
local-part = dot-atom / quoted-string / obs-local-part
domain = dot-atom / domain-literal / obs-domain
domain-literal = [CFWS] "[" *([FWS] dtext) [FWS] "]" [CFWS]
dtext = %d33-90 / ; Printable US-ASCII
%d94-126 / ; characters not including
obs-dtext ; "[", "]", or "\"
Здесь мы видим, что local-part может состоять из цитируемой строки , которая может содержать любой печатный символ US-ASCII (исключая \
и "
", но включая @
). Поэтому недостаточно проверить, содержит ли адрес электронной почты только один @
, если мы хотим разрешить адреса в соответствии с RFC 5322.
С другой стороны, если мы хотим разрешить любой действительный адрес электронной почты в соответствии с RFC 5322, мы также разрешим адреса, которые, вероятно, не существуют или просто бессмысленны в большинстве случаев (например, ""@localhost
).