我已经回顾了许多正则表达式的建议,但不幸的是它们要么限制太多(通过阻止正确地输入真实姓名而冒犯某些人)或者过于自由,我的意思是允许输入类似'---'的垃圾。
不幸的是,我不是一个正则表达式大师,我可以理解中等复杂的正则表达式,也许可以修改简单的更改,但现在我被卡住了
这是我的首发(所有重音字母,我不会在这里复制,因为字符串会长于我的屏幕)
[a-zA-Z ,.'-]{3,30}
空间和。, - 标点符号将在大多数情况下执行,但如果有人建议添加什么字符请注释。
现在我的问题:这个正则表达式允许连续多于1个标点符号,我不想允许。有一个空格然后有一个标点符号是合法的,但有两个或两个以上不合法,如“---”
我也不允许以空格开头,.-,换句话说我想只启用字母和'作为第一个字符。我可以管理这个(我希望):
[a-zA-Z']{1}[a-zA-Z ,.'-]{2,29}
...但是如何防止输入一串标点的问题仍然存在
答案 0 :(得分:1)
在.NET中,您可以使用命名的Unicode类来允许Unicode字母等等。
以下是您可以使用的正则表达式:
^(?!.*\p{P}\p{P}+)[\p{L}']{1}[\p{L}\p{Zs},.'-]{2,29}$
(?!.*\p{P}\p{P}+)
将一次禁止使用多个标点符号。
或者,您可以使用
^(?!.*\P{L}\P{L}+)[\p{L}']{1}[\p{L}\p{Zs},.'-]{2,29}$
但这不允许comma
+ space
。
这是demo(建议您在regexstorm.net上单独测试每个字符串,或参见alternative demo)。