如何在模式

时间:2018-11-14 16:28:03

标签: javascript html regex validation

我有一个<input type="email"/>,并希望它
a)是有效的电子邮件地址,
b)不同于给定的电子邮件地址-假设“ root @ localhost”。

我查看了Pattern for HTML input elements,现在我尝试编写一个排除特定值的模式。

我偶然发现了这篇帖子:A regular expression to exclude a word/string,并调查了negative look ahead,这是很有前途的。除了一件事:
如果我使用负向超前,它还将匹配开头的给定内容,不仅是那些完全匹配的内容。

我的代码:

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

这将导致验证错误

  • 空白文字(正确)
  • 非电子邮件文本(正确)
  • “ root @ localhost”的电子邮件地址(正确)
  • 任何以“ root @ localhost”开头的电子邮件地址(错误

能否请您帮我写一个从验证中完全排除一个电子邮件地址的模式?

在这里使用模式是否正确?

谢谢,
亚历山大

2 个答案:

答案 0 :(得分:1)

您可以使用

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

由于HTML5模式自动固定在两端,因此您不必将模式用^$括起来。

HTML5引擎处理完属性值后的整体正则表达式看起来像/^(?:(?!root@localhost$).*)$/(在FF和Chrome中,将使用u标志进行编译),并将匹配除行以外的任何0个或多个字符从一个字符串的开头到结尾都中断字符,该字符不等于root@localhost字符串。

答案 1 :(得分:0)

为什么不使用javascript验证

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

    return /.+\@.+\..+/.test(form.email);
}