JavaScript Regex - 将包含某些字符且不包含其他字符的字符串匹配

JavaScript Regex - Match a string with that contains some characters and doesn't contain others

本文关键字:字符 其他 包含 字符串 串匹配 包含某 JavaScript Regex      更新时间:2023-09-26

要求:

正则表达式应匹配不包含"@"符号但至少包含两个字母字符的字符串,并且长度在 2 到 50 个字符之间。

通过示例:

"Hi there!%%#"
"         fd"
"  9 z 80212132 z"

失败示例:

"anything with @"
"a"
"  9 z 80212132 "
"This string does not contain at symbol and has two characters but is too long!"

我相信我很接近,但是除了 [a-zA-Z] 以外的任何字符都会失败,我不确定为什么:

^((?![@])(?=[a-zA-Z]).){2,50}$

您的正则表达式不会检查至少两个 alpha。

您可以使用以下正则表达式:

^(?=(?:[^A-Za-z]*[A-Za-z]){2})[^@]{2,50}$

查看正则表达式演示

解释

  • ^ - 字符串的开头
  • (?=(?:[^A-Za-z]*[A-Za-z]){2}) - 必须至少出现两次零个或多个非字母字符,后跟一个字母
  • [^@]{2,50} - 除@以外的 2 到 50 个字符
  • $ - 字符串的结尾。

var re = /^(?=(?:[^A-Za-z]*[A-Za-z]){2})[^@]{2,50}$/; 
var strs = ['Hi there!%%#', '         fd' , '  9 z 80212132 z', 'anything with @ a', '  9 z 80212132 ', 'This string does not contain at symbol and has two characters but is too long!'];
 // demo
for (var s of strs) {
  document.body.innerHTML += "<i>" + s.replace(/ /g, '&nbsp;') + "</i> test result: <b>" +  re.test(s) + "</b><br/>";
}

它确保:

  • 没有字符是@
  • 至少 2 个字母字符
  • 总计在 2 到 50 之间

^(?!.*@)(?=(?:.*[a-zA-Z]){2}).{2,50}$

演示