Найти регулярное выражение, используемое форматами 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}"