使用正则表达式的 FluentValidation 不允许 N/A 或 NA 忽略大小写和空格

FluentValidation在 ASP.NET MVC 应用程序和某些字段中使用不允许用户输入N/A及其变体。

我发现蒂姆在这个问题中的回答有些帮助,但不完全是我想要的。它确实有效,但我不想使用RegexOptions.IgnoreCase像这样的选项进行验证似乎只发生在服务器端。

RuleFor(x => x.Question01)
    .Matches(@"^(?!\s*n\s*/?\s*a\s*$).*", RegexOptions.IgnoreCase)
    .WithMessage("Invalid answer.");

我正在寻找一个纯正则表达式解决方案(不使用RegexOptions.IgnoreCase),忽略大小写和空格以允许除N/AN / ANAN An/an / ana,n a等之外的任何内容。


长风秋雁
浏览 125回答 3
3回答

阿晨1998

如果您想完全匹配这些值并且不允许大小写混合的组合,您可以使用 alternation 将它们全部列出。请注意,\s它也匹配换行符。如果您想允许除此模式之外的所有模式,您可以使用负前瞻(?!来断言右侧的不是此模式和内联修饰符(?i)或(?i:^(?!(?i:n */? *a)$).+$^字符串的开头(?!负向前看,断言右边的不是(?i:不区分大小写匹配的内联修饰符n */? *amatch n,可选,/周围有可选空格)$关闭内联修饰符并断言字符串结尾)关闭前瞻.+匹配任何字符 1+ 次$断言字符串结尾.NET 正则表达式演示如果这也适用于 Javascript,则您可以使用字符类,因为不支持内联修饰符。^(?!(?:[nN] *\/? *[aA])$).+$正则表达式演示

慕姐8265434

这个解决方案确实有效:RuleFor(x => x.Question01)     .Matches(@"^(?!\s*[Nn]\s*/?\s*[Aa]\s*$).*")     .WithMessage("Invalid answer.");

潇潇雨雨

此正则表达式将匹配 N/A、n/a、NA、na 的任何变体忽略 N -> A 和 N -> / 和 / -> A 之间的所有空格\s*对于不区分大小写?我:最终结果:^(?i:n\s*/?\s*a)$
打开App,查看更多内容
随时随地看视频慕课网APP