[英]FluentValidation with Regular Expression not allowing N/A or NA Ignoring Case and White Space
我在ASP.NET MVC應用程序中使用FluentValidation
,對於某些字段,不允許用戶輸入N/A
及其變體。
我發現蒂姆在SO問題中的答案有所幫助,但並非完全符合我的需求。 它確實可以工作,但是我不想使用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
, NA
, n/a
, n / a
, na
, na
等之外的任何內容。
如果你想精確匹配的值,不允許有大小寫混合的組合,你可以使用它們全部列出交替 。
請注意 , \\s
也與換行符匹配。
如果要允許除此模式以外的所有模式,則可以使用負前瞻(?!
來斷言右側不是此模式,並且可以使用內聯修飾符(?i)
或(?i:
^(?!(?i:n */? *a)$).+$
^
字符串開頭 (?!
負向前進,斷言右邊的不是
(?i:
區分大小寫匹配的內聯修飾符 n */? *a
n */? *a
匹配項n
,可選/
包含可選空格 )$
關閉內聯修飾符並斷言字符串的結尾 )
提前關閉 .+
匹配任何字符1+次 $
字符串結尾 如果這也適用於Javascript,則可以使用字符類,因為不支持內聯修飾符。
^(?!(?:[nN] *\/? *[aA])$).+$
此正則表達式將匹配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.");
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.