C# 正则表达式名称验证(复杂逻辑)
我正在尝试使用以下规则验证名称:C# 正则表达式名称验证(复杂逻辑),c#,regex,validation,C#,Regex,Validation,我正在尝试使用以下规则验证名称: 不区分大小写 只有字母、空格、重音字符 至少有一个空格后跟一些字母John D或John Doe或John X Doe 不能同时有多个空格John X Doe 长度必须至少为5(带空格),最大为80 我想出了(?I)^[a-z]+(?:[\]?[a-z]+)*$ 一些问题: 仅验证“名称” 未验证长度 不接受重音字符 你可以用 ^(?=.{5,80}$)\p{L}*(?: \p{L}+)+$ 请参阅(我建议使用\z而不是$,因为\z匹配字符串的vary结尾,
John D
或John Doe
或John X Doe
John X Doe
(?I)^[a-z]+(?:[\]?[a-z]+)*$
一些问题:
^(?=.{5,80}$)\p{L}*(?: \p{L}+)+$
请参阅(我建议使用\z
而不是$
,因为\z
匹配字符串的vary结尾,但是,如果在模式中使用纯空格,则与此无关)
详情:
-字符串的开头^
-长度必须至少为5个字符,最多为80个字符(?=.{5,80}$)
-零个或多个字母(如果字符串不能以空格开头,请使用\p{L}*
而不是+
)*
-一个或多个空格和一个或多个字母的序列(这符合您的要求,不能同时有多个空格和至少一个空格后跟一些字母)(?:\p{L}++
-字符串结束$
\p{L}
匹配任何Unicode基本字母,因此只满足字母、空格、重音字符和不区分大小写的要求
如果您还需要支持变音符号,请将
\p{L}
替换为[\p{L}\p{M}]
关于重音符号,请查看[A-zÀ-ÿ]
显然匹配所有字母和带有重音的字母。我不明白您所说的是什么意思,在我的测试中只验证“Name”
,它也与姓氏匹配。要验证长度,您可以检查匹配的长度。如果使用属性验证,则可以添加[MinLength]
属性和[MaxLength]
属性。