是否有任何方法来限制字符串的长度正则表达式和匹配他们从整个段落?



所以,我想限制电子邮件地址的长度。例如,我希望电子邮件地址的长度应该少于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

相关内容

最新更新