我要求只接受符合以下条件的字符串值:
1)如果需要,可以从特殊字符开始
2)必须以大写字母开头(即使第一个字符是特殊字符)
3)字符串值不得连续2个特殊字符(连续)
4)字符串值不得连续2个空格(连续)
5)允许重音字符(例如:Faddas)
6)字符串开头或结尾处的封闭值有效但必须在括号内(即:(Ltd))
7)数字字符串中的任何地方都允许使用数字
我有以下正则表达式值:^(\(([^)]+)\))?[\@\#\$\%\&\*\(\)\-\_\+\]\[\'\;\:\?\.\,\!]?\p{Lu}+[\s'-]?\p{L}+(?:[\s'-]\p{L}+)+(\(([^)]+)\))*$
这适用于以下测试值:
东航运-LTD
东邮费(LTD)
但是下一个例子失败了:
东123Shipping(LTD)
有没有办法让字符串中的数字?
我尝试了[0-9]变体,[A-Za-z09]变化和p {N}变化,但无济于事。
非常感谢你的时间。
答案 0 :(得分:2)
这是一个 REALLY 讨厌的模式,但我能够简化它并做你想做的事情:
^(\(([^)]+)\))?[[:punct:]]?\p{Lu}+(?:[\s'-]?[\p{L}\d]+)+(\(([^)]+)\))*$
有许多有用的速记字符类,包括[[:punct:]]
,我用它来替换你的大量标点字符类。为了添加包含数字的功能,我将\p{L}
放在带有\d
标记的字符类中,该标记将匹配任何数字(使用任何语言,使用Unicode标记)。
答案 1 :(得分:0)
Here,我们有一些公司名称可接受的字符
^[0-9A-Za-zÀ-ÿ\s,._+;()*~'#@!?&-]+$