FirstName LastName的增强型正则表达式

时间:2015-04-21 07:25:02

标签: regex

我已经回顾了许多正则表达式的建议,但不幸的是它们要么限制太多(通过阻止正确地输入真实姓名而冒犯某些人)或者过于自由,我的意思是允许输入类似'---'的垃圾。

不幸的是,我不是一个正则表达式大师,我可以理解中等复杂的正则表达式,也许可以修改简单的更改,但现在我被卡住了

这是我的首发(所有重音字母,我不会在这里复制,因为字符串会长于我的屏幕)

[a-zA-Z ,.'-]{3,30}

空间和。, - 标点符号将在大多数情况下执行,但如果有人建议添加什么字符请注释。

现在我的问题:这个正则表达式允许连续多于1个标点符号,我不想允许。有一个空格然后有一个标点符号是合法的,但有两个或两个以上不合法,如“---”

我也不允许以空格开头,.-,换句话说我想只启用字母和'作为第一个字符。我可以管理这个(我希望):

[a-zA-Z']{1}[a-zA-Z ,.'-]{2,29}

...但是如何防止输入一串标点的问题仍然存在

1 个答案:

答案 0 :(得分:1)

在.NET中,您可以使用命名的Unicode类来允许Unicode字母等等。

以下是您可以使用的正则表达式:

^(?!.*\p{P}\p{P}+)[\p{L}']{1}[\p{L}\p{Zs},.'-]{2,29}$

(?!.*\p{P}\p{P}+)将一次禁止使用多个标点符号。


或者,您可以使用

禁止2个或更多连续的非字母符号
^(?!.*\P{L}\P{L}+)[\p{L}']{1}[\p{L}\p{Zs},.'-]{2,29}$

但这不允许comma + space

这是demo(建议您在regexstorm.net上单独测试每个字符串,或参见alternative demo)。