我目前正在构建一些自定义表单验证器并使用正则表达式来测试电子邮件地址的有效性。我从MSDN | How to: Verify that Strings Are in Valid Email Format获得regex
^(?(")(".+?(?<!\\)"@)|(([0-9a-z]((\.(?!\.))|[-!#\$%&'\*\+/=\?\^`\{\}\|~\w])*)(?<=[0-9a-z])@))(?(\[)(\[(\d{1,3}\.){3}\d{1,3}\])|(([0-9a-z][-\w]*[0-9a-z]*\.)+[a-z0-9][\-a-z0-9]{0,22}[a-z0-9]))$
并尝试使用RegexBuddy进行转换,但是我收到以下错误:
我不是一个regex
向导,但我会非常感谢您的帮助。我认为交替可以用于条件,但我非常不确定lookbehind
构造。
编辑:如果您阅读该SO帖子上的评论,您会发现这些评论都不是完美的,而且这种方法是由Microsoft记录的,所以它比其中许多测试更耐用。
答案 0 :(得分:1)
JavaScript不支持后台或条件。
这是我用于自定义表单中的电子邮件验证的“足够好”的正则表达式。它在JavaScript中运行良好。
/^[a-zA-Z0-9._%+-]+@[a-zA-Z0-9.-]+\.[a-zA-Z]{2,63}$/g
https://regex101.com/r/bB9vK2/3
支持非ASCII字符的“足够好”正则表达式的版本,但要小心,因为某些程序可能无法处理非ASCII字符。
/^([a-zA-Z0-9._%+-]|[^\x00-\x7F])+?@([a-zA-Z0-9.-]|[^\x00-\x7F])+\.([a-zA-Z]|[^\x00-\x7F]){2,63}$/g
https://regex101.com/r/bB9vK2/4
复杂的Javascript正则表达式(仅限ASCII)
/^(?=[A-Za-z0-9][A-Za-z0-9@._%+-]{5,253}$)[A-Za-z0-9._%+-]{1,64}@(?:(?=[A-Za-z0-9-]{1,63}\.)[A-Za-z0-9]+(?:-[A-Za-z0-9]+)*\.){1,8}[A-Za-z]{2,63}$/g
https://regex101.com/r/tN0vX9/2
复杂的Javascript正则表达式(具有非ASCII支持)
/^(?=([A-Za-z0-9]|[^\x00-\x7F])([A-Za-z0-9@._%+-]|[^\x00-\x7F]){5,253}$)([A-Za-z0-9._%+-]|[^\x00-\x7F]){1,64}@(?:(?=([A-Za-z0-9-]|[^\x00-\x7F]){1,63}\.)([A-Za-z0-9]|[^\x00-\x7F])+(?:-([A-Za-z0-9]|[^\x00-\x7F])+)*\.){1,8}([A-Za-z]|[^\x00-\x7F]){2,63}$/g
https://regex101.com/r/aC6yU2/1
在任何这些正则表达式中,只要您使用不区分大小写的修饰符,就可以用A-Z替换A-Za-z,因此在这些正则表达式中,您将使用/ gi(全局和不敏感)
与往常一样,请记住,客户端验证不能替代服务器端验证,主要是为了改善用户体验。
以下是有关如何选择电子邮件正则表达式的详细说明,其中包括基于SMTP功能(最多63个字符)引用TLD长度的实际限制以及RFC 5321中描述的官方标准的说明及其配套文件RFC 5322
http://www.regular-expressions.info/email.html
您可以在此网站上找到有关lookbehinds和条件的信息: http://www.regular-expressions.info/lookaround.html
在此尝试使用正则表达式: https://regex101.com/