Ошибка паттерна для валидации email

ArbNet
На сайте с 27.10.2019
Offline
139
334
<input id="input" name="email" autocomplete="on" pattern="^[a-zA-Z0-9._%+-]+@[a-zA-Z0-9.-]+\.[a-zA-Z]{2,}$">

В консоли ошибка: Pattern attribute value ^[a-zA-Z0-9._%+-]+@[a-zA-Z0-9.-]+\.[a-zA-Z]{2,}$ is not a valid regular expression: Uncaught SyntaxError: Failed to read the 'validationMessage' property from 'HTMLInputElement': Invalid regular expression: /^[a-zA-Z0-9._%+-]+@[a-zA-Z0-9.-]+\.[a-zA-Z]{2,}$/v: Invalid character in character class

В ошибке сказано, что есть какой-то не допустимый символ и почему-то показывает с слешами и флагом v, хотя в самом паттерне их нет

Первоначально я добавляю паттерн из js, упрощённый код:

let ptn=/^[a-zA-Z0-9._%+-]+@[a-zA-Z0-9.-]+\.[a-zA-Z]{2,}$/;

input.pattern=ptn.source

.source убирает слеши

ЗЫ. Не пойму пока в чём дело??

Mik Foxi
На сайте с 02.03.2011
Offline
1176
#1
а просто type="email" и required не устроит?
Антибот, антиспам, веб файрвол, защита от накрутки поведенческих: https://antibot.cloud/ Форум на замену серчу: https://foxi.biz/
ArbNet
На сайте с 27.10.2019
Offline
139
#2
Mik Foxi #:
а просто type="email" и required не устроит?

Нет. Я сделал с подсветкой при вводе данных, если не соответствует, то поле становится красным.

required только обязывает заполнение поля, а при отправке формы проверяется только наличие @ в середине

Проверяю другие варианты регулярок, конечно хочется учесть все возможные, но думаю придётся сделать по минимуму, input.pattern коряво сделан в браузере

Александр Воробьев
На сайте с 03.02.2020
Offline
46
#3

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

ArbNet
На сайте с 27.10.2019
Offline
139
#4
Александр Воробьев #:

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

Ты видишь в моём паттерне этот флаг? Его там нет. В браузере коряво сделана проверка самого паттерна.

ЗЫ. Я уже решил проблему, экранировал один символ + добавил поддержку кириллицы и других спец символов.

D.iK.iJ
На сайте с 26.05.2013
Offline
233
#5

Спросил нейронку. Говорит, дефис не экранирован.

Правильно:

<input id="input" name="email" autocomplete="on" pattern="[a-zA-Z0-9._%+\-]+@[a-zA-Z0-9.\-]+\.[a-zA-Z]{2,}">

Причина ошибки

Проблема, скорее всего, связана с дефисом ( - ) в классе символов [a-zA-Z0-9._%+-] . В классе символов дефис должен быть либо экранирован ( \- ), либо помещен в начало или конец класса, чтобы избежать интерпретации как диапазона (например, az ). В вашем шаблоне дефис в ._%+- находится в конце класса символов, что технически правильно, но некоторые браузеры все равно могут неправильно его интерпретировать или выдавать ошибки из-за строгого синтаксического анализа.

Кроме того, атрибут шаблона HTML ожидает регулярное выражение, которое работает без разделителей (например , / ) и без флагов, и оно должно быть совместимо с движком регулярных выражений JavaScript. Предоставленный вами шаблон должен работать, но давайте исправим все потенциальные проблемы и обеспечим совместимость.

Решение

Экранируйте дефис в классе символов, чтобы избежать неправильного толкования: замените[a-zA-Z0-9._%+-]на[a-zA-Z0-9._%+\-](обратите внимание на экранированный дефис\-).

Адаптивный дизайн в 2 строчки ( https://dikij.com/wm/adaptaciya-saytov.php ). + Принимаю заказы любой сложности ( https://searchengines.guru/ru/forum/926323 ). 💎 Еще я делаю классные кулоны с опалами ( https://mosaicopal.ru/ ).
ArbNet
На сайте с 27.10.2019
Offline
139
#6
D.iK.iJ #:
Говорит, дефис не экранирован.

Правильно говорит. Если бы я не сказал что экранировал символ, то нейронка вам бы не смогла это ответить, я тоже спрашивал и не получил правильного ответа. Стал частично проверять регулярку и выявил проблему.

D.iK.iJ
На сайте с 26.05.2013
Offline
233
#7
ArbNet #:

Правильно говорит. Если бы я не сказал что экранировал символ, то нейронка вам бы не смогла это ответить, я тоже спрашивал и не получил правильного ответа. Стал частично проверять регулярку и выявил проблему.

По моим наблюдениям, Грок справляется с программированием в разы лучше обычного чата Жпт и Дипсика. Ему можно и посложнее вопросы задавать. ))

E
На сайте с 01.10.2017
Offline
115
#8
ArbNet #:
Правильно говорит.

Это проблема конкретной реализации. По правилам дефис в начале или в конце множества не нужно экранировать.

И непустое множество, допускающее точку, а потом опять точка - как-то не очень.

Домены на продажу: https://p20.ru/collection/domains-for-sale
ArbNet
На сайте с 27.10.2019
Offline
139
#9
estic #:
По правилам дефис в начале или в конце множества не нужно экранировать.

Вот и я так думал. А в браузере оказывается надо экранировать..

ArbNet
На сайте с 27.10.2019
Offline
139
#10
estic #:
И непустое множество, допускающее точку, а потом опять точка - как-то не очень.

Регулярка изначально не моя, хорошо что не рабочая оказалась, свою составил получше.

ЗЫ. Просто первоначально накидал регулярок под разные значения, tel email, url, дата-время и тд. почти все нормальные оказались с небольшими правками кроме email(пришлось подольше перепроверять и переделывать)

Авторизуйтесь или зарегистрируйтесь, чтобы оставить комментарий