正则表达式 - 严格验证电子邮件地址的本地部分中的名称

时间:2017-06-26 20:19:11

标签: javascript regex validation email

我有这个正则表达式来验证电子邮件,过滤' John'来自' mycompany':

/^([a-z0-9][a-z0-9.]*)?john([a-z0-9.]*[a-z0-9])?@mycompany\.com$/

它主要是工作,只是验证:

john@mycompany.com
asd.john@mycompany.com 
john.asd@mycompany.com  

没有验证:

.john@mycompany.com
john.@mycompany.com

但它不应该允许:

asdjohn@mycompany.com  
johnasd@mycompany.com

我怎么能解决它?

2 个答案:

答案 0 :(得分:2)

您可以尝试在单词\b周围添加单词边界john,这似乎适用于您的特定情况:

var list = ['john@mycompany.com',
'asd.john@mycompany.com',
'john.asd@mycompany.com',
'.john@mycompany.com',
'john.@mycompany.com',
'asdjohn@mycompany.com',
'johnasd@mycompany.com']

var p = /^([a-z0-9][a-z0-9.]*)?\bjohn\b([a-z0-9.]*[a-z0-9])?@mycompany\.com$/
                             # ^^    ^^

list.map(email => ({[email]: p.test(email)}))
#[ { 'john@mycompany.com': true },
#  { 'asd.john@mycompany.com': true },
#  { 'john.asd@mycompany.com': true },
#  { '.john@mycompany.com': false },
#  { 'john.@mycompany.com': false },
#  { 'asdjohn@mycompany.com': false },
#  { 'johnasd@mycompany.com': false } ]

答案 1 :(得分:1)

试试这个:

/.*?(john)[a-zA-Z0-9]*@mycompany\.com$/

或简化版:

/.*?(john)\w*@mycompany\.com$/

您可以测试here