2017-02-27 23 views
2

我試圖添加驗證到表單字段,以便如果它包含某個單詞,將顯示一個錯誤。目前,我有這樣的:如何在C#中添加不區分大小寫的表單字段驗證?

Validation.Add("field-1", Validator.Regex("^((?!TEST)(?!test).)*$", "Field may not contain 'test'")); 

這工作得很好「TEST」和「測試」,但不會阻止其他人進入「測試」。

我已經嘗試添加不區分大小寫的標誌,但本作的正則表達式完全停止工作:(我)

Validation.Add("field-1", Validator.Regex("/^((?!TEST)(?!test).)*$/i", "Field may not contain 'test'")); 

我也看了here可用於忽略大小寫,但沒」將不起作用要麼 - 也許我把它放錯了地方:

Validation.Add("field-1", Validator.Regex("^((?i)(?!TEST)(?!test).)*$", "Field may not contain 'test'")); 

這是可行的無添加「測試」的每一個可能的變化?

+1

嘗試'「(?i)^(?!。* TEST)。* $」'。它也似乎是你的['「^((?i)(?!TEST)(?! test)。)* $」'](http://regexstorm.net/tester?p=%5e%28%28% 3fi%29%28%3f!TEST%29%28%3f!test%29.%29 *%24&i = There + is + a + tESt + here)should also work(雖然這裏的脾氣暴躁的標記是一種「矯枉過正「)。 –

+0

沒有那個運氣。看起來像(?i)的任何變化都會殺死整個事物。 – Andy

+1

這是否意味着你在客戶端運行這個? '(?i)'在JS中不起作用,它只能在.NET中工作(以及其他一些正則表達式)。 –

回答

1

看來你的正則表達式是在客戶端處理的。 JavaScript的RegExp不支持(?i)內嵌修飾符(它不支持任何內嵌改性劑,連XRegExp庫),所以出來的唯一方法是使用字符類拼出所有的字母大小寫:

Validation.Add("field-1", Validator.Regex("^(?!.*[Tt][Ee][sS][tT]).*$", "Field may not contain 'test'")); 

請注意,您的溫和的貪婪標記太耗費資源,因此在這裏使用簡單的負向預測更容易。如果您需要支持多行字符串,請將.替換爲[\s\S]字符類。

詳細

  • ^ - 串
  • (?!.*[Tt][Ee][sS][tT])開始 - 不能有任何TestTesT,等等,任何0+字符
  • .*後 - 任何0+字符,儘可能多的
  • $ - 字符串結尾。
4

使用參數爲RegexOptions.IgnoreCaseRegex類的實例。

Regex validator = new Regex(@"TEST", RegexOptions.IgnoreCase); 

if(validator.IsMatch(formValue)) 
{ 
    // Do something about this 
} 
相關問題