我正在尝试为数据成员创建一些验证规则,但我的正则表达式之一有问题。目前我正在使用 @"[a-zA-Z']+$"
,因为我想允许以下字符串:
这按预期工作,但是当我尝试传递仅包含特殊字符的字符串时,它允许它。有没有办法允许我允许特殊字符 '
,但不允许它自己?
这是我创建的规则:
RuleFor(h => h.Name)
.Cascade(CascadeMode.Stop)
.NotEmpty().WithMessage("{PropertyName} is required")
.Matches(@"[a-zA-Z']+$").WithMessage("{PropertyName} is invalid");
答案 0 :(得分:1)
你可以使用
RuleFor(h => h.Name)
.Cascade(CascadeMode.Stop)
.NotEmpty().WithMessage("{PropertyName} is required")
.Matches(@"^(?!'+$)[a-zA-Z']+(?:\s+[a-zA-Z']+)*$").WithMessage("{PropertyName} is invalid");
参见regex demo。
^
- 匹配字符串位置的开始(?!'+$)
- 如果有一个或多个 '
字符,紧跟在当前(即字符串的开头)位置右侧的字符串结尾位置,则匹配失败的负前瞻。 [a-zA-Z']+
- 一个或多个字母或 '
(?:\s+[a-zA-Z']+)*
- 零次或多次重复
\s+
- 一个或多个空格[a-zA-Z']+
- 一个或多个字母或 '
个字符$
- 字符串结束。