HTML5模式属性:排除关键字

时间:2016-09-30 22:50:41

标签: regex html5 forms validation

我试图编写HTML5模式以防止用户输入免费电子邮件帐户。到目前为止,我有这个......

<input name="email"
placeholder="Work Email"
required
type="email"
title="Enter a valid work email address (No free email services)"
pattern="^((?!hotmail)(?!gmail)(?!ymail)(?!googlemail)(?!live)(?!gmx)(?!yahoo)(?!outlook)(?!msn)(?!icloud)(?!facebook)(?!aol)(?!zoho)(?!mail)(?!yandex)(?!hushmail)(?!lycox)(?!lycosmail)(?!inbox)(?!myway)(?!aim)(?!fastmail)(?!goowy)(?!juno)(?!shortmail)(?!atmail)(?!protonmail).)*$"/>

很接近,但缺少两条关键规则......

  • 应该只看看&#39; @&#39;之间的关系。和&#39;。&#39;
  • 应该不区分大小写。

有关如何使其发挥作用的任何想法?

更新 为避免对我是否应该这样做做出无益的评论,请考虑输入字段不应包含已知关键字列表的其他用例。类似的用例可能是脏话或存在多个前缀的ID前缀,但是你想避免只输入一种类型... ID永远不应该包含IXT并且用户输入... WIN-09880,IXT-2342,NTS -23422。

3 个答案:

答案 0 :(得分:2)

这是一个非常糟糕的主意,但本着回答你问题的精神,这是我的答案。

您可以使用:

pattern="^.+@((?!hotmail)(?!gmail)(?!ymail)(?!googlemail)(?!live)(?!gmx)(?!yahoo)(?!outlook)(?!msn)(?!icloud)(?!facebook)(?!aol)(?!zoho)(?!mail)(?!yandex)(?!hushmail)(?!lycox)(?!lycosmail)(?!inbox)(?!myway)(?!aim)(?!fastmail)(?!goowy)(?!juno)(?!shortmail)(?!atmail)(?!protonmail).)+\..+$"

只能在'@'和'。'之间查看。 HTML5不支持不区分大小写的i标志,因此您需要在模式中使用JavaScript或硬编码不区分大小写。

答案 1 :(得分:0)

无法

  • 我发现了一份包含 2840 条目的免费电子邮件提供商的非详尽列表。

  • 您将阻止在Microsoft,Google,Facebook,Yahoo,ProtonMail,Free,Orange,Sfr和其他许多人工作的用户。

  • 对于拥有域名的用户,您会怎么做?

答案 2 :(得分:0)

以下是正则表达式的更正(缩短)版本,仅针对地址的域部分:

^(?!.*@(?:hotmail|gmail|ymail|googlemail|live|gmx|yahoo|outlook|msn|icloud|facebook|aol|zoho|mail|yandex|hushmail|lycox|lycosmail|inbox|myway|aim|fastmail|goowy|juno|shortmail|atmail|protonmail)\.\w+$).*$

如果您需要,可以进一步缩短它:

^(?!.*@(?:live|gmx|yahoo|outlook|msn|icloud|facebook|aol|zoho|yandex|lycox|inbox|myway|aim|goowy|juno|(?:hot|[gy]|google|short|at|proton|hush|lycos|fast)?mail)\.\w+$).*$

你不能使它不区分大小写,因为非常烦人的JavaScript正则表达式不支持内联修饰符。但是你必须使用正则表达式吗?我更喜欢使用可更新的禁止域列表的代码解决方案。