正则表达式:电子邮件包含数字,但它们不是年份模式
Regex: Email contain numbers but they are not on year pattern
我是正则表达式的新手,在学习了一些教程之后,我越来越难以实现像 "Email contain numbers but they are not on year pattern".
这样的匹配条件
所以,我有这个简单的正则表达式 "contain numbers":
\d+(?=@)
考虑到电子邮件地址确实有数字,我想匹配不属于以下其中之一的表达式:
\w*(19|20)\d{2}\D*(?=@)
\w*[6-9][0-9]\D*(?=@)
\w*[0-1][0-9]\D*(?=@)
如何在正则表达式中表达这个?
匹配输入示例:
foo123@gmail.com
a22oo@hotmail.com
hoo567@outlook.com
示例不匹配输入:
foo@gmail.com
johndoe88@hotmail.com
john1976@outlook.com
正则表达式很难反转,即不匹配某些东西。
在你的简单情况下,我会解析一个任意长的数字,然后执行签入代码,最好是在将其转换为整数之后。
但是对于你的问题,下面的情况会颠倒大小写,只是或它们在一起[=13=]
(\d)| 1 digit
([2345]\d)| 2 digits not starting with 0,1,6,7,8,9
(\d\d\d)| 3 digits
((1[^9]|2[^0]|[03-9]\d)\d\d)| 4 digits not starting with 19 or 20
(\d\d\d\d\d*) 5+ digits
像这样。我相信有人可以让它更漂亮。
编辑
这里是完整的正则表达式,现在可以正确测试所有可能的情况,我可以想到匹配您指定的标准,以及适当的边界测试(参见 https://regex101.com/r/sM5aF7/1):
(\b|[^\d\s])(\d|[2345]\d|\d{3}|(1[^9]|2[^0]|[03-9]\d)\d\d|\d{5,})(\D*?@|@)
此正则表达式通过了您的示例:
\D(?![6-9]\d\D)\d{2,3}\D
我是正则表达式的新手,在学习了一些教程之后,我越来越难以实现像 "Email contain numbers but they are not on year pattern".
这样的匹配条件所以,我有这个简单的正则表达式 "contain numbers":
\d+(?=@)
考虑到电子邮件地址确实有数字,我想匹配不属于以下其中之一的表达式:
\w*(19|20)\d{2}\D*(?=@)
\w*[6-9][0-9]\D*(?=@)
\w*[0-1][0-9]\D*(?=@)
如何在正则表达式中表达这个?
匹配输入示例:
foo123@gmail.com
a22oo@hotmail.com
hoo567@outlook.com
示例不匹配输入:
foo@gmail.com
johndoe88@hotmail.com
john1976@outlook.com
正则表达式很难反转,即不匹配某些东西。
在你的简单情况下,我会解析一个任意长的数字,然后执行签入代码,最好是在将其转换为整数之后。
但是对于你的问题,下面的情况会颠倒大小写,只是或它们在一起[=13=]
(\d)| 1 digit
([2345]\d)| 2 digits not starting with 0,1,6,7,8,9
(\d\d\d)| 3 digits
((1[^9]|2[^0]|[03-9]\d)\d\d)| 4 digits not starting with 19 or 20
(\d\d\d\d\d*) 5+ digits
像这样。我相信有人可以让它更漂亮。
编辑
这里是完整的正则表达式,现在可以正确测试所有可能的情况,我可以想到匹配您指定的标准,以及适当的边界测试(参见 https://regex101.com/r/sM5aF7/1):
(\b|[^\d\s])(\d|[2345]\d|\d{3}|(1[^9]|2[^0]|[03-9]\d)\d\d|\d{5,})(\D*?@|@)
此正则表达式通过了您的示例:
\D(?![6-9]\d\D)\d{2,3}\D