3

我想用规则验证字符串:

  • 字符串必须至少包含一个字母
  • 字符串只能包含那些符号(但这不是必须的):' , - , ( , )
  • 如果字符串中存在符号,则它还必须包含一个字母(至少一个第一个项目符号
  • 只有符号是不允许的

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

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

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

4

2 回答 2

1

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

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

如果您想允许任何字符但只允许符号子集,请使用“至少 1 个字母”限制

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 个或多个字母、数字、空格和允许的符号
  • $- 字符串结束。
于 2019-03-15T08:19:13.640 回答
-1

试试这个正则表达式

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

示范

于 2019-03-15T07:58:34.300 回答