Найти регулярное выражение, используемое форматами HTML5 для проверки

Некоторые элементы ввода HTML5 принимают атрибут pattern, который является регулярным выражением для проверки формы. Некоторые другие элементы ввода HTML5, такие как input type=email, автоматически проверяют.

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

Ответ 1

спецификация HTML5 в настоящее время перечисляет действительный адрес электронной почты как соответствующий ABNF:

1*( atext / "." ) "@" ldh-str *( "." ldh-str )

который освещен в этом вопросе. ответ @SLaks предоставляет эквивалент регулярного выражения.

Тем не менее, с небольшим рытьем через источник, показано, что WebKit реализовал проверку адреса электронной почты, используя в основном то же регулярное выражение, что и ответ SLaks, т.е.

[a-z0-9!#$%&'*+/=?^_`{|}~.-][email protected][a-z0-9-]+(\.[a-z0-9-]+)*

Однако не требуется, чтобы адреса электронной почты проверялись регулярным выражением. Например, Mozilla (Gecko) реализовала проверку подлинности электронной почты с помощью довольно простого конечный автомат. Следовательно, не требуется регулярное выражение, связанное с проверкой подлинности электронной почты.

Ответ 2

Спецификация HTML5 теперь дает (ненормативное) регулярное выражение, которое должно точно соответствовать всем адресам электронной почты, которые он определяет как действительные. Там есть копия этого в моем блоге: http://blog.gerv.net/2011/05/html5_email_address_regexp/ и в самой спецификации: https://html.spec.whatwg.org/#e-mail-state-(type=email))

Версия выше неверна только в том случае, если она не ограничивает компоненты домена не более 255 символов и не мешает им начинать или заканчивать "-".

Gerv

Ответ 3

это работает для меня: шаблон = "[^ @] + @[^ @]+. [A-Za-Z] {2,6}"