我试图编写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).)*$"/>
很接近,但缺少两条关键规则......
有关如何使其发挥作用的任何想法?
更新 为避免对我是否应该这样做做出无益的评论,请考虑输入字段不应包含已知关键字列表的其他用例。类似的用例可能是脏话或存在多个前缀的ID前缀,但是你想避免只输入一种类型... ID永远不应该包含IXT并且用户输入... WIN-09880,IXT-2342,NTS -23422。
答案 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正则表达式不支持内联修饰符。但是你必须使用正则表达式吗?我更喜欢使用可更新的禁止域列表的代码解决方案。