Javascript XRegExp接受所有UTF-8字符、字与字之间的空格,以排除某个符号,且无尾随空格

Javascript XRegExp接受所有UTF-8字符、字与字之间的空格,以排除某个符号,且无尾随空格,javascript,regex,utf-8,Javascript,Regex,Utf 8,我很难找到XRegExp中的正则表达式来接受JavaScript中的这些类型的需求: 接受所有UTF-8字符 单词之间的空格是允许的,怎么只有1个空格而不是多个 允许所有符号,例如:!#$%^&*()除了:“@” 字符串后面或前面没有尾随空格,例如: “你好,世界!”//应该是真的 “Hello World!”//应为false “Hello World!”//应为false 以下是应通过的示例: “Å”象形字 123//应为真 “怎么了?123”//应该是真的 “!#$%^&*()+=+”

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

  • 接受所有UTF-8字符
  • 单词之间的空格是允许的,怎么只有1个空格而不是多个
  • 允许所有符号,例如:!#$%^&*()除了:“@”
  • 字符串后面或前面没有尾随空格,例如:
“你好,世界!”//应该是真的

“Hello World!”//应为false

“Hello World!”//应为false

以下是应通过的示例:

“Å”象形字 123//应为真

“怎么了?123”//应该是真的

“!#$%^&*()+=+”//应为true

以下示例应失败:

”hello@gmail.com“//应因“@”符号而失败

“!@$%^&*()\+=”//应因“@”符号而失败

上面还有更多的例子

到目前为止,我得到的是:

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

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


任何帮助都将不胜感激

您可以依赖于使用负lookaheads的常规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!”)+“-必须为true
;”/真的 document.body.innerHTML+=rx.test(“Hello World!”)+“-必须为false
”//应该是假的 document.body.innerHTML+=rx.test(“Hello World!”)+“-必须为false
”//应该是假的 document.body.innerHTML+=rx.test(“Å象形字 123“+”-必须为true
//应该是真的 document.body.innerHTML++=rx.test(“What's up?123”)+“-必须为true
”//应该是真的 document.body.innerHTML+=rx.test(“!\//应该是真的 document.body.innerHTML+=rx.test(“hello@gmail.com“”+“-必须失败
”//应因“@”符号而失败
document.body.innerHTML+=rx.test(“!@$%^&*()”、“+”)-“必须失败
”//如果由于“@”符号而失败,我相信可以使用这个RegExp(在XRegExp中不需要)。有长度限制吗?哇,太棒了!你是regex国王。哈哈,我也忘了提一下,它的最小长度必须是2,最大长度必须是20。它甚至更好。我用lookahead替换了前一个重载的正则表达式,其中两个-
(?!\s)(?![^]*\s$)
-被替换为
\s[^]{0,18}\s
子模式。