2012-09-21 29 views
3

我想寫一個正則表達式(在ASP.NET的RegularExpressionValidator使用),因此:如果要驗證的字符串包含字母A後跟的RegularExpressionValidator - 驗證一個字符串不匹配的表達

通過字母B,驗證應該失敗。

如果要驗證的字符串包含字母F後面跟W,X,Y,Z或任何數字,驗證應該失敗。

我想出這個

(AB)|(F(W|X|Y|Z|[0-9])) 

但據我可以告訴大家,如果輸入不匹配表達式驗證會成功。

如果輸入與表達式不匹配,我需要做什麼才能使驗證失敗?

非常感謝,

大衛

回答

5

這是negative lookaheads

(?!.*AB)(?!.*F[WXYZ\d]) 

未能在這些字符串。它與任何文本都不匹配(如果您要做的只是檢查是否匹配,那應該就足夠了),所以匹配結果將始終爲空字符串

3

這會工作:

A[^B]|F[^WXYZ0-9]|[^AF]. 
  • 的A,接着爲任何東西,除了一個B,或
  • 一架F其次是什麼excepty w^,X,Y,Z或數字,或
  • 其他的A或F後跟任何單個c haracter

請注意,這也會匹配「A $」或「@@」。如果你只想匹配「一個字母后跟一個字母或數字」,然後使用此:

A[AC-Z0-9]|F[A-V]|[B-EG-Z][A-Z0-9] 

正則表達式是在積極的比賽更好。

注意,對於正則表達式驗證整個字符串必須匹配(如果只是一個子串匹配,驗證報告驗證失敗)

2

您可以使用您的編程語言提供的邏輯非運算符否定返回的結果通過匹配操作,不需要修改你的正則表達式。

編輯:如果上述不是選項,請看下面這些問題1,23

+0

是的,但這不會在正則表達式驗證程序中工作,您需要一個CustomValidator。 –

+0

@HansKesting感謝您的信息。請看看我的編輯。 –

1

您可以執行匹配此正則表達式

^(?!^.*?AB)(?!^.*?F[WXYZ\d]).*$ 

Here一個工作示例。基本上,它的意思是「找到除了包含AB的字符串之前和之後的任意數量的字符以及除了包含F後面跟着W,X,Y,Z或數字的字符串之外的所有字符串」。信息在this鏈接提供了蒂姆Pietzcker的答案

相關問題