我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/A, N / A, NA, N A, n/a, n / a, na,n a等之外的任何內容。
3 回答

阿晨1998
TA貢獻2037條經驗 獲得超6個贊
如果您想完全匹配這些值并且不允許大小寫混合的組合,您可以使用 alternation 將它們全部列出。
請注意,\s
它也匹配換行符。
如果您想允許除此模式之外的所有模式,您可以使用負前瞻(?!
來斷言右側的不是此模式和內聯修飾符(?i)
或(?i:
^(?!(?i:n?*/??*a)$).+$
^
字符串的開頭(?!
負向前看,斷言右邊的不是(?i:
不區分大小寫匹配的內聯修飾符n */? *a
match?n
,可選,/
周圍有可選空格)$
關閉內聯修飾符并斷言字符串結尾
)
關閉前瞻.+
匹配任何字符 1+ 次$
斷言字符串結尾
如果這也適用于 Javascript,則您可以使用字符類,因為不支持內聯修飾符。
^(?!(?:[nN]?*\/??*[aA])$).+$

慕姐8265434
TA貢獻1813條經驗 獲得超2個贊
這個解決方案確實有效:
RuleFor(x => x.Question01) .Matches(@"^(?!\s*[Nn]\s*/?\s*[Aa]\s*$).*") .WithMessage("Invalid answer.");

瀟瀟雨雨
TA貢獻1833條經驗 獲得超4個贊
此正則表達式將匹配 N/A、n/a、NA、na 的任何變體
忽略 N -> A 和 N -> / 和 / -> A 之間的所有空格
\s*
對于不區分大小寫
?我:
最終結果:
^(?i:n\s*/?\s*a)$
- 3 回答
- 0 關注
- 181 瀏覽
添加回答
舉報
0/150
提交
取消