我正在写一个正则表达式来表示可接受的名字和姓氏。目前,我只想允许以下内容
我的正则表达式为@"^[a-zA-Z-'\p{L}]*$"
尽管我想允许使用单引号和破折号,但我也不希望名称以破折号 just 或以撇号 just 开头。因此,为此,我在Fluent Validator中编写了一些额外的正则表达式来捕获这些极端情况,但不允许我将它们拆分。
.Matches(@"^[a-zA-Z-'\p{L}]*$")
.Matches(@"[^-]")
.Matches(@"[^']");
这也不是什么好事,因为我也不想允许像''''''这样的单引号或像---------这样的短划线的名字。
是否可以编写出更有效的正则表达式来处理所有这些情况?
答案 0 :(得分:1)
您可以为此使用negative lookahead assertion:
@"^(?![-']*$)[-'\p{L}]*$"
a-zA-Z
中也包含\p{L}
。
说明:
^ # Start of string
(?! # Assert that it's impossible to match...
[-']* # a string of only dashes and apostrophes
$ # that extends to the end of the entire string.
) # End of lookahead.
[-'\p{L}]* # Match the allowed characters.
$ # End of string.