我有一个<input type="email"/>
,希望它
a(是一个有效的电子邮件地址,
b(不是给定的电子邮件地址-比如说"root@localhost".
我研究了HTML输入元素的模式,现在我尝试编写一个模式排除特定值。
我偶然发现了这篇文章:一个排除单词/字符串的正则表达式,并着眼于负面展望,这很有希望。除了一件事:
如果我使用负前瞻,它还将匹配以开头的任何给定exlusion,而不仅仅是那些与它完全匹配的!
我的代码:
<input type="email" name="email" pattern="^(?!root@localhost).+$" required>
这将导致的验证错误
- 空文本(正确(
- 非电子邮件文本(正确(
- 电子邮件地址"root@localhost"(正确(
- 任何以"开头的电子邮件地址root@localhost"(错误(
你能帮我写一个模式,从验证中只排除一个电子邮件地址吗?
在这里使用模式正确吗?
谢谢,
Alexander
您可以使用
pattern="(?!root@localhost$).*"
由于HTML5模式是自动锚定在两端的,所以不必用^
和$
来包围模式。
HTML5引擎处理属性值后的整个正则表达式将看起来像/^(?:(?!root@localhost$).*)$/
(在FF和Chrome中,它将使用u
标志编译(,并且将匹配除换行符之外的任何0个或更多个字符,从字符串的开始到结束,这不等于root@localhost
字符串。
为什么不使用javascript验证
function validate(form) {
if (form.email === "root@localhost") {
return false;
}
return /.+@.+..+/.test(form.email);
}