Как исключить определенный литерал в Pattern - PullRequest
0 голосов
/ 14 ноября 2018

У меня есть <input type="email"/> и я хочу его
а) быть действующим адресом электронной почты и
б) быть чем-то отличным от данного адреса электронной почты - скажем, «root @ localhost».

Я изучил шаблон для элементов ввода HTML , и теперь я пытаюсь написать шаблон , исключающий конкретное значение.

Я наткнулся на это сообщение: Регулярное выражение для исключения слова / строки и заглянул в негативный взгляд в будущее , что было довольно многообещающе. За исключением одного:
Если я использую отрицательный прогноз , он также будет соответствовать всему, что начинается с данного исключения, а не только тем, которые точно соответствуют ему!

Мой код:

<input type="email" name="email" pattern="^(?!root@localhost).+$" required>

Это приведет к ошибке проверки для

  • пустой текст (правильный)
  • тексты не по электронной почте (правильно)
  • адрес электронной почты «root @ localhost» (правильный)
  • любые адреса электронной почты, начинающиеся с «root @ localhost» ( неправильно )

Не могли бы вы мне помочь, как написать шаблон, который исключает из проверки ровно один адрес электронной почты?

Правильно ли здесь используется шаблон?

Спасибо
Александр

Ответы [ 2 ]

0 голосов
/ 14 ноября 2018

Вы можете использовать

pattern="(?!root@localhost$).*"

Поскольку шаблоны HTML5 автоматически закрепляются на обоих концах, вам не нужно заключать шаблон в ^ и $.

Общее регулярное выражение после обработки движком HTML5 значения атрибута будет выглядеть как /^(?:(?!root@localhost$).*)$/ (в FF и Chrome оно будет скомпилировано с флагом u) и будет соответствовать любым 0 или более символам, кроме символов переноса строки, из начало до конца строки, которое не равно root@localhost строка.

0 голосов
/ 14 ноября 2018

Почему бы не использовать проверку JavaScript

function validate(form) {
    if (form.email === "root@localhost") {
        return false;
    }

    return /.+\@.+\..+/.test(form.email);
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...