Найти регулярное выражение, используемое формами HTML5 для проверки
Некоторые элементы ввода HTML5 принимают pattern
атрибут, который является регулярным выражением для проверки формы. Некоторые другие элементы ввода HTML5, такие как, input type=email
делает проверку автоматически.
Теперь кажется, что способ обработки проверки в разных браузерах различен. С учетом конкретного браузера, скажем, Chrome, возможно ли программно извлечь регулярное выражение, используемое для проверки? Или, может быть, там есть документация?
3 ответа
Спецификация HTML5 в настоящее время перечисляет действительный адрес электронной почты как совпадающий с ABNF:
1*( atext / "." ) "@" ldh-str *( "." ldh-str )
который разъясняется в этом вопросе. Ответ @SLaks предоставляет регулярное выражение.
Тем не менее, немного покопавшись в источнике, показывает, что WebKit реализовал проверку адреса электронной почты, используя в основном то же регулярное выражение, что и ответ SLaks, т.е.
[a-z0-9!#$%&'*+/=?^_`{|}~.-]+@[a-z0-9-]+(\.[a-z0-9-]+)*
Однако не требуется, чтобы адреса электронной почты проверялись регулярным выражением. Например, Mozilla (Gecko) реализовала проверку электронной почты, используя довольно простой конечный автомат. Следовательно, нет необходимости в регулярном выражении, вовлеченном в проверку электронной почты.
Спецификация HTML5 теперь дает (ненормативный) регулярное выражение, которое должно точно соответствовать всем адресам электронной почты, которые оно определяет как допустимые. Его копия есть в моем блоге здесь: http://blog.gerv.net/2011/05/html5_email_address_regexp/ и в самой спецификации: https://html.spec.whatwg.org/)
Вышеприведенная версия неверна только в том смысле, что она не ограничивает компоненты домена максимум 255 символами и не препятствует тому, чтобы они начинались или заканчивались "-".
Gerv