簡體   English   中英

使用帶有Regex條件條件的RegularExpression屬性驗證屬性始終通過

[英]Validating property using RegularExpression attribute with regex conditional always passes

我正在嘗試在RegularExpression屬性中使用條件RegularExpression來驗證屬性的特定格式集,但是似乎只要將其(條件語句)包括在模式中,任何內容都會通過驗證。

我嘗試過最簡單的示例,也嘗試過Microsoft的示例(例如: @"\\b(?(\\d{2}-)\\d{2}-\\d{7}|\\d{3}-\\d{2}-\\d{4})\\b"但似乎沒有任何效果(允許所有值)。

為了清楚起見,添加了以下內容:我需要驗證稅務登記號。 規則是:

if it starts with country identifier 
   for country CC do strict format check
   for all other countries allow any string
else 
  assume it's local number and do strict format check

(大多數情況下,注冊將是本地的,並且規則是已知的,但是應該可以輸入格式未知的外國號碼)。

雖然我肯定會感謝上面的正則表達式,但我的問題不是關於特定模式本身, 而是為什么在這種特定情況下(asp.net/c#屬性)使用條件(條件)會導致驗證失敗,以及如何解決它。

條件語句的語法為(?(?=condition)iftrue|else) ,因此您的正則表達式可能為

\b(?(?=\d{2}-)\d{2}-\d{7}|\d{3}-\d{2}-\d{4})\b

但在我看來,在此示例中您不需要條件,請記住(?=...)為零寬度(此處條件是互斥的),這應該足夠了:

\b(?:\d{2}-\d{7}|\d{3}-\d{2}-\d{4})\b

我錯過了明顯的事情(感謝Robin向我指出實施的方向)

這是發生了什么事:)
我檢查了.net支持條件(確實)
我在Regex屬性中添加了條件,並很高興地對其進行了解析和編譯。

然后,我嘗試通過啟動網絡表單並輸入亂碼來檢查其是否有效。 當輸入失去焦點時,它將產生有關格式錯誤的警告消息。 它沒。

我忘記的是,這種“即時”客戶端驗證(mvc非侵入式驗證)實際上是通過mvc模板引擎生成並嵌入的jquery / javascript代碼完成的。

這意味着它實際上是與這些模式匹配的javascript。 不幸的是javascript 不支持條件 語句 ,因此只要看到一個就可以了

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM