C# 正则表达式不允许N/A或NA忽略大小写和空白的FluentValidation
我在我的ASP.NET MVC应用程序中使用C# 正则表达式不允许N/A或NA忽略大小写和空白的FluentValidation,c#,regex,asp.net-mvc,fluentvalidation,C#,Regex,Asp.net Mvc,Fluentvalidation,我在我的ASP.NET MVC应用程序中使用FluentValidation,对于某些字段,不允许用户输入N/A及其变体 我发现蒂姆的答案有些帮助,但并不完全是我想要的。它确实可以工作,但我不想使用RegexOptions.IgnoreCase作为验证,使用这样的选项似乎只在服务器端发生 RuleFor(x=>x.01) .Matches(@“^(?!\s*n\s*/?\s*a\s*$)*”,RegexOptions.IgnoreCase) .WithMessage(“无效答案”); 我正在寻
FluentValidation
,对于某些字段,不允许用户输入N/A
及其变体
我发现蒂姆的答案有些帮助,但并不完全是我想要的。它确实可以工作,但我不想使用RegexOptions.IgnoreCase
作为验证,使用这样的选项似乎只在服务器端发生
RuleFor(x=>x.01)
.Matches(@“^(?!\s*n\s*/?\s*a\s*$)*”,RegexOptions.IgnoreCase)
.WithMessage(“无效答案”);
我正在寻找一个纯正则表达式解决方案(不使用
RegexOptions.IgnoreCase
),忽略大小写和空格,以允许除N/a
,N/a
,NA
,NA
,N/a
,N/a
,NA
,NA
,之外的任何内容,等等。如果您想精确匹配这些值,并且不允许大小写混合的组合,您可以使用
注意\s
也与换行符匹配
如果您想允许除此模式之外的所有模式,可以使用负前瞻(?!
来断言右侧的不是此模式,并使用内联修饰符(?i)
或(?i:
^(?!(?i:n */? *a)$).+$
字符串的开头^
负前瞻,断言右边的不是(?!
内联修饰符,用于不区分大小写的匹配(?i:
匹配n*/?*a
,可选n
用可选空格包围/
关闭内联修饰符并断言字符串的结尾)$
关闭前瞻)
匹配任意字符1+次+
断言字符串的结尾$
^(?!(?:[nN] *\/? *[aA])$).+$
如果要精确匹配这些值,并且不允许大小写混合的组合,可以使用 注意
\s
也与换行符匹配
如果您想允许除此模式之外的所有模式,可以使用负前瞻(?!
来断言右侧的不是此模式,并使用内联修饰符(?i)
或(?i:
^(?!(?i:n */? *a)$).+$
字符串的开头^
负前瞻,断言右边的不是(?!
内联修饰符,用于不区分大小写的匹配(?i:
匹配n*/?*a
,可选n
用可选空格包围/
关闭内联修饰符并断言字符串的结尾)$
关闭前瞻)
匹配任意字符1+次+
断言字符串的结尾$
^(?!(?:[nN] *\/? *[aA])$).+$
此正则表达式将匹配N/A、N/A、NA、NA的任何变化 忽略N->A和N->/和/->A之间的所有空格 \s* 对案件不敏感 ?一: 最终结果:
^(?i:n\s*/?\s*a)$
此正则表达式将匹配N/A、N/A、NA、NA的任何变化 忽略N->A和N->/和/->A之间的所有空格 \s* 对案件不敏感 ?一: 最终结果:
^(?i:n\s*/?\s*a)$
此解决方案确实有效:
RuleFor(x => x.Question01)
.Matches(@"^(?!\s*[Nn]\s*/?\s*[Aa]\s*$).*")
.WithMessage("Invalid answer.");
此解决方案确实有效:
RuleFor(x => x.Question01)
.Matches(@"^(?!\s*[Nn]\s*/?\s*[Aa]\s*$).*")
.WithMessage("Invalid answer.");
他说忽略空白,所以我假设n/a和n/a也都会match@andyb952你是对的,不确定大小写是否可以混合。我已经用空格和大小写的变体对它进行了更新。是的,“etc”在我的问题中,是指任何变体,包括小写和大写的混合,而忽略空格。谢谢,它现在可以工作。但是,由于某些原因,它只在服务器端工作。我刚才发布的解决方案甚至可以在客户端工作。只要我键入
N/A
或它的任何变体,验证消息就会立即出现。@PateeGutee,如果你想要的话t若要在Javascript中使用此模式,则可以使用匹配大写或小写字符的字符类,因为Javascript不支持内联修饰符(?i)
或(?i:
例如^(?(?:[nN]*\/?*[aA])$).+$
看,他说忽略空白,所以我假设n/a和n/a也会同时忽略空白match@andyb952你是对的,不确定大小写是否可以混合。我已经用空格和大小写的变体对它进行了更新。是的,“etc”在我的问题中,是指任何变体,包括小写和大写的混合,而忽略空格。谢谢,它现在可以工作。但是,由于某些原因,它只在服务器端工作。我刚才发布的解决方案甚至可以在客户端工作。只要我键入N/A
或它的任何变体,验证消息就会立即出现。@PateeGutee,如果你想要的话t若要在Javascript中使用此模式,则可以使用匹配大写或小写字符的字符类,因为Javascript不支持内联修饰符(?i)
或(?i:
例如^(?(?:[nN]*\/?*[aA])$).+$
看到它做的是相反的。当在FluentValidation
中使用时,它允许N/A
及其变体,但不允许正确答案。它做的是相反的。当在FluentValidation
中使用时,它允许N/A
及其变体,但不允许正确答案。