2016-01-18 3 views
2

У меня есть поле ввода электронной почты, у меня есть регулярное выражение ^[^@][email protected][^@.]+.[^@]+$, но при запуске он не требует .com.Проверка шаблона HTML5 игнорируется

Перейдите на страницу https://jsfiddle.net/uscktx9d/ и введите www @ www и нажмите отправить. Это должно привести к отказу, но это не так. Как вы можете видеть здесь https://regex101.com/r/pB6iF4/1, регулярное выражение должно быть обязательным .com.

Почему мой HTML5 не требует этого?

+2

Вы пропускаете '\' 'избежать буквальное' .' в вопросе и в связанном скрипку. Добавляем '' '' к скрипту, поэтому все регулярное выражение '^ [^ @] + @ [^ @.] + \. [^ @] + $' Отклоняет 'www @ www' и принимает' www @ www. com'. – Cirdec

+1

, и вы можете избежать первых^и последних $, которые неявны в шаблонах HTML5: [^ @] + @ [^ @] + \. [^ @] + Достаточно –

ответ

3

Если вы собираетесь использовать проверку ввода HTML5 для электронной почты, используйте type email. Это приведет к проверке подлинности HTML5 для электронных писем и добавит преимущества (например, отображение символа @ на виртуальных клавиатурах мобильных устройств).

Кроме того, помните, что любая проверка интерфейса должна быть повторно проверена на бэкэнд.

Чтобы ответить на ваш вопрос, вам нужно избежать . с обратной косой чертой.

+0

Спасибо. К сожалению, «тип электронной почты» тоже не заботится о .com. Однако побег - это то, чего я не видел. – Boone

+2

Возможно, хорошим компромиссом будет '', Шаблон просто проверит, что TLD и HTML5 позаботятся о '@' логике. – Sam

1

В регулярном выражении буквальная точка должна быть объявлена ​​как экранированный символ \.. См. Special characters in regular expressions, который должен быть экранирован, если вы хотите убедиться, что они рассматриваются как литералы.

Кроме того, значение HTML5 pattern attribute привязывается по умолчанию, то есть весь рисунок обернут в ^(?: и )$.

Язык регулярных выражений, используемый для этого атрибута является таким же, как используется в JavaScript, за исключением того, что атрибут модели сопоставляются с полной стоимостью, а не только любым подмножества (несколько, как будто это подразумевает ^(?: в начале рисунка и )$ в конце).

Таким образом, вам просто нужно использовать

<input name="asdf" pattern="[^@][email protected][^@.]+\.[^@]+" placeholder="[email protected]" title="[email protected]"> 

См updated fiddle

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