Regex HTML5模式属性:排除关键字
我正在尝试编写一个HTML5模式,以防止用户进入免费电子邮件帐户。到目前为止我有这个Regex HTML5模式属性:排除关键字,regex,html,forms,validation,Regex,Html,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)(?
<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).)*$"/>
很接近,但缺少两条关键规则
- 应该只看“@”和“.”之间的内容
- 应该不区分大小写
- 我发现了一个非详尽的免费电子邮件提供商列表,其中包含2840个条目
- 您将阻止在Microsoft、Google、Facebook、Yahoo、ProtonMail、Free、Orange、Sfr和许多其他网站工作的用户
- 您将如何处理拥有其域名的用户
- 我发现了一个非详尽的免费电子邮件提供商列表,其中包含2840个条目
- 您将阻止在Microsoft、Google、Facebook、Yahoo、ProtonMail、Free、Orange、Sfr和许多其他网站工作的用户
- 您将如何处理拥有其域名的用户
- 您不能:
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或硬编码区分大小写。这是一个非常糟糕的主意,但本着回答您问题的精神,我的答案如下 您可以使用:
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或硬编码区分大小写。以下是您的正则表达式的更正(并缩短)版本,它只针对地址的域部分:
^(?)*(:hotmail、gmail、ymail、Google mail、live、gmx、yahoo、outlook、msn、icloud、facebook、aol、zoho、mail、yandex、hushmail、lycosmail、inbox、myway、aim、fastmail、goowy、Atjuno、Protomail.*>
如果需要,您可以进一步缩短它:
^(?)*(:live | gmx | yahoo | outlook | msn | icloud | facebook | aol | zoho | yandex | lycox | inbox | myway aim | goowy | juno |(?:hot |[gy y]| google short | at | proton | hush | lycos | | | fast | | | | | | |
您不能使其不区分大小写,因为JavaScript正则表达式风格不支持内联修饰符,这非常令人烦恼。但是你必须使用正则表达式吗?我更喜欢使用可更新的禁用域列表的代码解决方案。以下是您的正则表达式的更正(并缩短)版本,它只针对地址的域部分:
^(?)*(:hotmail、gmail、ymail、Google mail、live、gmx、yahoo、outlook、msn、icloud、facebook、aol、zoho、mail、yandex、hushmail、lycosmail、inbox、myway、aim、fastmail、goowy、Atjuno、Protomail.*>
如果需要,您可以进一步缩短它:
^(?)*(:live | gmx | yahoo | outlook | msn | icloud | facebook | aol | zoho | yandex | lycox | inbox | myway aim | goowy | juno |(?:hot |[gy y]| google short | at | proton | hush | lycos | | | fast | | | | | | |
您不能使其不区分大小写,因为JavaScript正则表达式风格不支持内联修饰符,这非常令人烦恼。但是你必须使用正则表达式吗?我更喜欢使用可更新的禁用域列表的代码解决方案。是的,请阅读更多关于lookaheads的内容,并进行测试,以更好地了解它们是什么以及它们是如何工作的。请注意,您可以在它们内部使用替换。搜索有关内联修改器的信息。请描述所有从“@”开始的内容。另外,阻止用户输入免费电子邮件地址是一个非常奇怪的想法。地址的这部分不需要区分大小写,电子邮件域不区分大小写,如果输入大小写很重要,您可以在从表单收到数据后进行字符串到小写的转换。如果它们在Facebook或Microsoft工作,该怎么办?还是在雅虎工作?您拒绝他们使用他们的工作电子邮件,而这正是您所要求的。@Martin我正在使用HTML5模式属性来阻止用户在表单字段中输入免费电子邮件帐户。因此,在用户提交表单以使用HTML5验证之前,需要转换为小写。我想我可以把它应用到模糊上。是的,多读一些关于lookaheads的文章,做一些测试来更好地理解它们是什么以及它们是如何工作的。请注意,您可以在它们内部使用替换。搜索有关内联修改器的信息。请描述所有从“@”开始的内容。另外,阻止用户输入免费电子邮件地址是一个非常奇怪的想法。地址的这部分不需要区分大小写,电子邮件域不区分大小写,如果输入大小写很重要,您可以在从表单收到数据后进行字符串到小写的转换。如果它们在Facebook或Microsoft工作,该怎么办?还是在雅虎工作?您拒绝他们使用他们的工作电子邮件,而这正是您所要求的。@Martin我正在使用HTML5模式属性来阻止用户在表单字段中输入免费电子邮件帐户。因此,在用户提交表单以使用HTML5验证之前,需要转换为小写。我想我可以把它应用到模糊上。虽然这不是对所问问题的技术性回答,但我完全同意(如上评论所述)得出结论的要点理由。因此,令人烦恼的是,我想-1表示不是代码解决方案答案,而是+1表示逻辑推理+1赢了,只是…@Martin我不确定一个好的答案必须是b