Regex: Email validation that allows only hyphens in the middle of the domain and top-level domain
我知道以前有很多人问过这个问题,但我还没有找到真正符合所有条件的邮件地址必须符合被认为有效。
将以下内容视为电子邮件地址的结构:
1 | part1@part2.part3.part4 |
part1=用户名
第2部分=域
part3和part4=顶级域
这些都是必须满足的条件:
这是我当前使用的正则表达式:
1 | ^([\w\.\-]+)@([\w\-]+)((\.(\w){2,9})+)$ |
号
但不符合条件:4、5、6、7和8
我只是想知道如何补充我的正则表达式,并在此过程中学习。
编辑电子邮件地址中唯一允许的特殊字符是:点、连字符、下划线和at符号这是无效电子邮件的列表
mkyong–必须包含"@"符号
[email protected]–域不能以点""开头。
mkyong()*@gmail.com–电子邮件只允许使用字符、数字、下划线和破折号
mkyong@%*.com–电子邮件的tld仅允许字符和数字
[email protected]–不允许使用双点"."
[email protected]–电子邮件的最后一个字符不能以点结尾。
mkyong@[email protected]–不允许使用双"@"
[email protected]包含两个字符的电子邮件TLD不能包含数字
有效的:
根据您的有效和无效电子邮件地址列表,这是我所能做到的最好的:
1 | ^([\w-]|(?<!\.)\.)+[a-zA-Z0-9]@[a-zA-Z0-9]([\w\-]+)((\.([a-zA-Z]){2,9})+)$ |
号
演示
更新时间:
1 | ^([\w-]|(?<!\.)\.)+[a-zA-Z0-9]@[a-zA-Z0-9]([a-zA-Z0-9\-]+)((\.([a-zA-Z]){2,9}){0??,2})$ |
An email address must not accept white spaces
号
不,
Only one @ sign is allowed
号
不,
There can not be a special character before or after the at sign
号
我不知道这是什么意思,但可能不是真的。
There can not be a special character before or after the domain dot (the dot after part2 of the email address)
号
You can not enter two or more dots in a row in the username
号
江户十一〔四〕号
请不要使用正则表达式验证电子邮件地址。
电子邮件地址确实具有特定的格式,可以表示为正则表达式。RFC5322的官方格式为:
1 | (?:[a-z0-9!#$%&'*+/=?^_`{|}~-]+(?:\.[a-z0-9!#$%&'*+/=?^_`{|}~-]+)*|"(?:[\x01-x08\x0b\x0c\x0e-\x1f\x21\x23-\x5b\x5d-\x7f] | \\[\x01-\x09\x0b\x0c\x0e-\x7f])*")@ (?:(?:a-z0-9](?:[a-z0-9-]*[a-z0-9])?\.)+[a-z0-9](?:[a-z0-9-]*[a-z0-9])? | \[(?:(?:25[0-5]|2[0-]0-9]|[01]?[0-9][0-9]?)\.){3} (?:25[0-5]|2[0-4][0-9]|[01]?[0-9][0-9]?|[a-z0-9-]*[a-z0-]: ?:[\x01-\x08\x0b\x0c\x0e-\x1f\x21-\x5a\x53-\x7f]|\\[\x01-\x09\x0b\x0c\x0e-\x7f])+)\]) |
正如Jan Goyvaerts所指出的,正则表达式不发送电子邮件,因此在收件人发送和接收电子邮件之前,您实际上无法知道它是无效的。
由于您以自己的方式调整了电子邮件正则表达式,所以这并不正确。它可能会回答您使用该格式的要求,但电子邮件是固定格式,因此只使用参考格式,或简化格式,如正则表达式页面上列出的格式。否则,这个问题将永远无法满足您的具体要求。