xregexp 有不同的结果

xregexp having different result

我想用规则验证字符串:

到目前为止,我已经想出了以下正则表达式:

    static personName = XRegExp.cache("^[\s\p{L}\'\-\(\)]+(?=\S*\p{L})\S+$");

无法正常工作。只有 "^(?=\S*\p{L})\S+$" 这对字母有帮助,我很难理解如何向其中添加符号以便通过所有规则,我做错了什么?

试试这个正则表达式

 ^[a-zA-Z0-9\'\-\(\)]*[a-zA-Z][a-zA-Z0-9\'\-\(\)]*$

Demonstration

如果您允许的字符仅限于您列举的字符,您可以使用

var regex = XRegExp("^[\s'()-]*\p{L}[\s\p{L}'()-]*$"); 

如果你想允许任何字符但只允许一部分符号,使用 "at least 1 letter" 限制使用

var regex = XRegExp("^[\p{N}\s'()-]*\p{L}[\p{L}\p{N}\s'()-]*$"); 

查看 JS 演示:

var regex = XRegExp("^[\s'()-]*\p{L}[\s\p{L}'()-]*$");
console.log( regex.test("Sóme (unknown-string) doesn't like it") );

var regex = XRegExp("^[\p{N}\s'()-]*\p{L}[\p{L}\p{N}\s'()-]*$"); 
console.log( regex.test("Sóme unknown-string (123)") );
<script src="https://cdnjs.cloudflare.com/ajax/libs/xregexp/3.2.0/xregexp-all.min.js"></script>

详情

  • ^ - 字符串开头
  • [\s'()-]* - 0 个或更多空格,'()- 个字符
  • [\p{N}\s'()-]* - 0 个或更多数字、空格和允许的符号
  • \p{L} - 一封信
  • [\s\p{L}'()-]* - 0 个或多个空格、字母、'()- 个字符
  • [\p{L}\p{N}\s'()-]* - 0 个或多个字母、数字、空格和允许的符号
  • $ - 字符串结尾。