JavaScript正则表达式 - 必须至少包含UTF-8中的任何2个字母

时间:2015-12-07 19:49:31

标签: javascript regex string utf-8

目前,我正在尝试使用以下条件创建JavaScript正则表达式:

  • 接受所有UTF-8字符
  • 允许单词之间的空格,如何只有1个空格而不是多个。
  • 允许所有符号例如:!#$%^& *()_- = {} []除外:" @"
  • 字符串之后或之前没有尾随空格。
  • 范围应为2-16个字符,包括空格
  • 字符串中必须包含至少2个字母的字符。

这是我到目前为止制定的正则表达式:

/^(?![^@]*@)(?![^]*\s\s)\S[^]{0,14}\S$/

到目前为止,除了它不符合最后一个必须包含至少2个字母的条件外,它还会执行以下所有操作。例如:

"..He" //should be true

"He$*" //should be true

".." //should be false

"*%" //should be false

"!#$%^&*()" //should be false since there is no letters

"$$tonyMoney™" //should be true

"أنا أحب جاف™" //should be true

"To" //should be true

任何帮助表示赞赏!谢谢!

1 个答案:

答案 0 :(得分:1)

您可以使用此基于XRegExp的正则表达式:

var rx = XRegExp("^(?![^@]*@)(?![^]*\\s\\s)(?=(?:\\P{L}*\\p{L}){2})\\S[^]{0,14}\\S$");

正则表达式分解:

  • ^ - 字符串开始
  • (?![^@]*@) - 字符串
  • 中没有@
  • (?![^]*\\s\\s) - 没有两个连续的空格
  • (?=(?:\\P{L}*\\p{L}){2}) - 至少2个Unicode字母
  • \\S[^]{0,14}\\S - 长度为2到16个符号,字符串的开头和结尾没有空格。
  • $ - 字符串结尾

请参阅regex demo



var rx = XRegExp("^(?![^@]*@)(?![^]*\\s\\s)(?=(?:\\P{L}*\\p{L}){2})\\S[\\s\\S]{0,14}\\S$");
document.body.innerHTML = rx.test("..He") + " - must be true<br/>";
document.body.innerHTML += rx.test("He$*") + " - must be true<br/>"; 
document.body.innerHTML += rx.test("..") + " - must be false<br/>"; 
document.body.innerHTML += rx.test("*%") + " - must be false<br/>"; 
document.body.innerHTML += rx.test("!#$%^&*()") + " - must be false<br/>"; 
document.body.innerHTML += rx.test("$$tonyMoney™") + " - must be true<br/>"; 
document.body.innerHTML += rx.test("To") + " - must be true<br/>"; 
document.body.innerHTML += rx.test("أنا أحب جاف™") + " - must be true<br/>";
&#13;
<script src="https://cdnjs.cloudflare.com/ajax/libs/xregexp/2.0.0/xregexp-all-min.js"></script>
&#13;
&#13;
&#13;