XRegExp接受所有UTF-8字符,单词之间的空格,排除某个符号,并且没有尾随空格

时间:2015-12-03 22:22:55

标签: javascript regex utf-8

我很难在XRegExp中找出正则表达式来接受JavaScript中的这些类型的要求:

  • 接受所有UTF-8字符
  • 允许单词之间的空格,如何只有1个空格而不是多个。
  • 允许所有符号例如:!#$%^& *()_- = {} []除了:“@”
  • 字符串之后或之前没有尾随空格,例如:

"Hello World!" //should be true

" Hello World! " //should be false

"Hello World!" //should be false

以下是应该通过的示例:

"ÅÅÅÅ 象形字 123" //should be true

"What's up? 123" //should be true

"!#$%^&*()_+=+" //should be true

以下示例应该失败:

"hello@gmail.com" //should fail because of "@" symbol

"!@#$%^&*()_+=" //should fail because of "@" symbol

以上更多例子

到目前为止我所拥有的是:

XRegExp('^\\p{L}|[0-9]+$')

只接受所有UTF-8字符和数字。

任何帮助将不胜感激!

1 个答案:

答案 0 :(得分:1)

您可以依赖通常使用负面前瞻功能的RegExp:

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

故障:

  • ^ - 字符串开头
  • (?![^@]*@) - 没有@符号
  • (?![^]*\s\s) - 没有双重空格
  • \S[^]{0,18}\S - 非空白符号(1),[^]{0,18} - 0到18个任意字符和1个非空格(总共最多20个,最小2个)。
  • $ - 字符串结束。



var rx = /^(?![^@]*@)(?![^]*\s\s)\S[^]{0,18}\S$/;
document.body.innerHTML = rx.test("Hello World!") + " - must be true<br/>";// true
document.body.innerHTML += rx.test(" Hello World! ") + " - must be false<br/>"; //should be false
document.body.innerHTML += rx.test("Hello   World!") + " - must be false<br/>"; //should be false
document.body.innerHTML += rx.test("ÅÅÅÅ 象形字 123") + " - must be true<br/>"; //should be true
document.body.innerHTML += rx.test("What's up? 123") + " - must be true<br/>"; //should be true
document.body.innerHTML += rx.test("!#$%^&*()_+=+") + " - must be true<br/>"; //should be true
document.body.innerHTML += rx.test("hello@gmail.com") + " - must fail<br/>"; //should fail because of "@" symbol
document.body.innerHTML += rx.test("!@#$%^&*()_+=") + " - must fail<br/>"; //should fail because of "@" symbol
&#13;
&#13;
&#13;