包含字母数字和特殊字符但不包含特殊字符的正则表达式

Regex for including alphanumeric and special characters but not special characters on their own

我正在尝试为数据成员创建一些验证规则,但在使用我的一个正则表达式时遇到了问题。目前我正在使用 @"[a-zA-Z']+$" 因为我想允许这样的字符串:

这按预期工作,但当我尝试传递仅包含特殊字符的字符串时,它允许了。有没有一种方法可以允许特殊字符 ',但不允许它单独使用?

这是我创建的规则:

        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']+ - 一个或多个字母或 ' 个字符
  • $ - 字符串结尾。