Почему jQuery проверяет регулярное выражение электронной почты, разрешая электронные письма, заканчивающиеся на "." - PullRequest
0 голосов
/ 16 сентября 2011

Мы любим jQuery validate и очень хотим продолжать его использовать.

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

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

Код jquery.validate-1.8.1 в вопросе:

        // http://docs.jquery.com/Plugins/Validation/Methods/email
    email: function(value, element) {
        // contributed by Scott Gonzalez: http://projects.scottsplayground.com/email_address_validation/
        return this.optional(element) || /^((([a-z]|\d|[!#\$%&'\*\+\-\/=\?\^_`{\|}~]|[\u00A0-\uD7FF\uF900-\uFDCF\uFDF0-\uFFEF])+(\.([a-z]|\d|[!#\$%&'\*\+\-\/=\?\^_`{\|}~]|[\u00A0-\uD7FF\uF900-\uFDCF\uFDF0-\uFFEF])+)*)|((\x22)((((\x20|\x09)*(\x0d\x0a))?(\x20|\x09)+)?(([\x01-\x08\x0b\x0c\x0e-\x1f\x7f]|\x21|[\x23-\x5b]|[\x5d-\x7e]|[\u00A0-\uD7FF\uF900-\uFDCF\uFDF0-\uFFEF])|(\\([\x01-\x09\x0b\x0c\x0d-\x7f]|[\u00A0-\uD7FF\uF900-\uFDCF\uFDF0-\uFFEF]))))*(((\x20|\x09)*(\x0d\x0a))?(\x20|\x09)+)?(\x22)))@((([a-z]|\d|[\u00A0-\uD7FF\uF900-\uFDCF\uFDF0-\uFFEF])|(([a-z]|\d|[\u00A0-\uD7FF\uF900-\uFDCF\uFDF0-\uFFEF])([a-z]|\d|-|\.|_|~|[\u00A0-\uD7FF\uF900-\uFDCF\uFDF0-\uFFEF])*([a-z]|\d|[\u00A0-\uD7FF\uF900-\uFDCF\uFDF0-\uFFEF])))\.)+(([a-z]|[\u00A0-\uD7FF\uF900-\uFDCF\uFDF0-\uFFEF])|(([a-z]|[\u00A0-\uD7FF\uF900-\uFDCF\uFDF0-\uFFEF])([a-z]|\d|-|\.|_|~|[\u00A0-\uD7FF\uF900-\uFDCF\uFDF0-\uFFEF])*([a-z]|[\u00A0-\uD7FF\uF900-\uFDCF\uFDF0-\uFFEF])))\.?$/i.test(value);
    },

Ответы [ 2 ]

6 голосов
/ 16 сентября 2011

stackoverflow.com. совершенно правильно - на самом деле это единственный способ сделать доменное имя Полностью определенным доменным именем. Технически, именно ваши серверные системы виноваты в том, что не приняли это (хотя Я уверен, что сам написал код проверки в прошлом, который также не принимает его ...)

Более подробное объяснение см. http://www.dns -sd.org / TrailingDotsInDomainNames.html .

1 голос
/ 16 сентября 2011

Я думаю, что эта страница объяснит, почему точка разрешена в конце:

http://en.wikipedia.org/wiki/Fully_qualified_domain_name

Полное доменное имя (FQDN), иногда также называемое абсолютное доменное имя, [1] является доменным именем, которое определяет его точное расположение в древовидной иерархии системы доменных имен (DNS). Это определяет все уровни домена, включая домен верхнего уровня и корневой домен. Полное доменное имя отличается своим однозначность; это можно интерпретировать только одним способом.

Например, если дано устройство с локальным именем хоста myhost и родителем доменное имя example.com, полное доменное имя myhost.example.com. Поэтому полное доменное имя однозначно идентифицирует устройство - хотя в мире может быть много хостов, называемых myhost, быть только одним myhost.example.com. В системе доменных имен и большинство в частности, в файлах зон DNS указывается полное доменное имя с завершающей точкой. Например, somehost.example.com. определяет абсолютное доменное имя, оканчивающееся пустой меткой домена верхнего уровня.

Корневой домен DNS не назван, что выражается пустой меткой, в результате доменное имя заканчивается разделителем точек.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...