所以,我想限制电子邮件地址的长度。例如,我希望电子邮件地址的长度应该少于20个字符。
let regEx = /[a-zA-Z]([w]+)@[a-zA-Z]+.(com)/gim
这是我的正则表达式代码,我正在验证电子邮件。我想限制长度,例如20个字符或更少。然后我希望这个正则表达式匹配整个段落或字符串的结果。
"第一个邮件地址m123456789999@xmail.com不应该匹配,因为它太长了但是这个邮件m1234@xmail.com应该匹配整个字符串。">
我尝试使用(?=.{1,20}$)
来限制长度。当邮件地址不在一整个段落内时,它也能正常工作。例如,当
m123456789999@xmail.com //Doesn't match
m1234@xmail.com //Match
但是如果这些邮件是在一个完整的段落中,它就不匹配了。像
"第一个邮件地址m123456789999@xmail.com不应该匹配,因为它太长了但是这个邮件m1234@xmail.com应该匹配整个字符串。">
可以这样做:
const input = `This first mail address m123456789999@xmail.com shouldn't match because it's too long but this mail m1234@xmail.com should be a match from this whole string.`;
const regex = /b(?![w@.]{21,})[a-zA-Z]([w]+)@[a-zA-Z]+.(com)b/gim;
const matches = input.match(regex);
console.log(matches);
输出:
[
"m1234@xmail.com"
]
正则表达式解释:
b
—用非字字符锚定邮件的字边界(?![w@.]{21,})
—[a-zA-Z]([w]+)@[a-zA-Z]+.(com)
—您的原始正则表达式b
—用非字字符锚定邮件的字边界
请注意你的正则表达式太严格了,在电子邮件地址中允许许多额外的字符,特别是在@
之前的名称部分中的'+'。
解析每个RFC的电子邮件地址实际上并不是那么容易,但它可以用一个简短的正则表达式相当准确地完成。一个实际的RFC:822兼容的电子邮件正则表达式有6000多个字符长!
下面是一个简短的正则表达式来验证电子邮件地址的合理准确性:
^w[w.%+-]*@(?:[w-]+.)+[a-zA-Z]{2,63}$
bw[w.%+-]*@(?:[w-]+.)+[a-zA-Z]{2,63}b
第一个正则表达式用于独立的电子邮件地址,第二个正则表达式用于文本字符串中的电子邮件地址。
了解更多关于regex和电子邮件地址验证: https://twiki.org/cgi-bin/view/Codev/TWikiPresentation2018x10x14Regex