包含字母数字和特殊字符但不包含特殊字符的正则表达式
Regex for including alphanumeric and special characters but not special characters on their own
我正在尝试为数据成员创建一些验证规则,但在使用我的一个正则表达式时遇到了问题。目前我正在使用 @"[a-zA-Z']+$"
因为我想允许这样的字符串:
- 约翰·史密斯(有效)
- Steve Mc'millan(有效)
- '''''(无效)
- Hill St'(有效)
这按预期工作,但当我尝试传递仅包含特殊字符的字符串时,它允许了。有没有一种方法可以允许特殊字符 '
,但不允许它单独使用?
这是我创建的规则:
RuleFor(h => h.Name)
.Cascade(CascadeMode.Stop)
.NotEmpty().WithMessage("{PropertyName} is required")
.Matches(@"[a-zA-Z']+$").WithMessage("{PropertyName} is invalid");
您可以使用
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']+
- 一个或多个字母或 '
个字符
$
- 字符串结尾。
我正在尝试为数据成员创建一些验证规则,但在使用我的一个正则表达式时遇到了问题。目前我正在使用 @"[a-zA-Z']+$"
因为我想允许这样的字符串:
- 约翰·史密斯(有效)
- Steve Mc'millan(有效)
- '''''(无效)
- Hill St'(有效)
这按预期工作,但当我尝试传递仅包含特殊字符的字符串时,它允许了。有没有一种方法可以允许特殊字符 '
,但不允许它单独使用?
这是我创建的规则:
RuleFor(h => h.Name)
.Cascade(CascadeMode.Stop)
.NotEmpty().WithMessage("{PropertyName} is required")
.Matches(@"[a-zA-Z']+$").WithMessage("{PropertyName} is invalid");
您可以使用
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']+
- 一个或多个字母或'
个字符
$
- 字符串结尾。