Нужно создать некоторое регулярное выражение для проверки доменных имен (RFC 952 / RFC 1123) - PullRequest
1 голос
/ 13 января 2012

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

Они разбирают такие вещи, как "dave@-whever.com", это идет вразрез с правилами RFC 952 / RFC 1123, так как начинается с дефиса.Они попросили, чтобы мы предоставили им наш список регулярных выражений, чтобы они могли обновить валидацию на своей платформе, чтобы она соответствовала нашей.

Итак, мне нужно найти / построить принятый RFC 952 / RFC 1123.Я нашел это в другой ветке SO (я скрытник :)), будет ли она подходящей и предотвратит отправку этих нелегальных доменов?

"^(([a-zA-Z]|[a-zA-Z][a-zA-Z0-9\-]*[a-zA-Z0-9])\.)*([A-Za-z]|[A-Za-z][A-Za-z0-9\-]*[A-Za-z0-9])$";

1 Ответ

6 голосов
/ 13 января 2012

Доменная часть имеет максимальную длину 255 символов и может состоять только из цифр, символов ASCII и дефисов;дефис не может быть первым.

Проверка правильности одного компонента домена может быть выполнена с использованием этого регулярного выражения, без учета регистра, независимо от длины:

[a-z0-9]+(-[a-z0-9]+)*

Это снова шаблон normal* (special normal*)*normal, являющимся [a-z0-9] и особым существом -.

Затем вы берете все это в другом шаблоне normal* (special normal*)* как часть normal и специальное существо ., и привязываете егов начале и в конце:

^[a-z0-9]+(-[a-z0-9]+)*(\.[a-z0-9]+(-[a-z0-9]+)*)+$

Если вы не можете позволить себе сопоставление без учета регистра, добавьте A-Z к классу символов.

Но обратите внимание, что он не проверяет максимальныйдлина 255. Это может быть сделано с использованием положительного взгляда, но регулярное выражение станет очень сложным, и будет короче использование функции длины строки;)

...