2008-11-19 3 views
10

Я использую плагин jQuery.Validation для проверки на стороне клиента и среди прочего проверяю адреса электронной почты. Теперь я также хочу проверить на стороне сервера (для пользователей без javascript и т. Д.). Из-за отсутствия лучших идей я начал с регулярного выражения, но довольно скоро понял, что хочу иметь важное значение для использования тех же требований, что и метод jQuery. В качестве альтернативы, если бы я мог найти способ переопределить требования к проверке jQuery с моим собственным, это было бы нормально.Требования к проверке электронной почты jQuery

Кто-нибудь знает, какие требования имеет метод jQuery? Является ли это регулярным выражением, и, в случае, если это выражение? Есть ли способ переопределить его, даже если я этого не знаю?

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

ответ

22

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

Вот источник:

// 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(element.value); 
}, 

Вот только регулярное выражение часть:

/^((([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] 
)))\.?$/ 

EDIT: Я не заметил раньше, но некоторые из символов в регулярном выражении были съедены, как разметки. Я положил его в блок кода и добавил новые строки. Обратите внимание, что эти строки являются «читабельностью» и не являются частью реального регулярного выражения.

+1

, который был монстром! =) Большое спасибо! – 2008-11-19 12:55:33

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