我正在尋找一個可以驗證非負數的decimal(.NET類型)的正則表達式,即如果可以使用decimal.Parse(...)
解析非負值,那麼應該認爲它是有效的。否則無效。正則表達式來驗證.NET的非負十進制或空白?
我很好,如果它沒有通過28-29位有效數字驗證 - 依靠用戶的理智 - 然後我們有另一個驗證層,無論如何都會接收它。
這裏是我想出了:
^(?:[1-9]\d*|0)?(?:\.\d+)?$
問題是,它拒絕1.
這是一個有效的數字(你可以在VS立即窗口驗證)。可能是其他邊緣情況,我沒有測試。請指教。
P.S.我包含ASP.NET和C#標記,因爲這是用C#編寫的Web應用程序,其中這個正則表達式被傳遞給第三方組件,然後在客戶端(即JS)上工作,所以我不能輕鬆地將自定義代碼那裏(即decimal.TryParse
或者那樣)。
'decimal.Parse'也接受一家領先的標誌。 '「+1」是一個可以解析的非負值。所以''-0「',甚至。 'decimal.Parse'還可以接受數千個分隔符:'「1,000」'可以被解析。 'decimal.Parse'是文化敏感的,所以'''不應該被硬編碼,除非文化是一樣的。 'decimal.Parse'接受空格。 '「100」'可以被解析。我可能錯過了更多。 – hvd
@ hvd,是的,我明白,謝謝你提到那些邊緣情況。我不試圖做到100%完美,只是試圖覆蓋99.9%的測試用例。還有一些培訓可以確保人們不會在用戶界面上發瘋。如果你真的想要的話,我肯定總能打破任何程序。 – Neolisk
@ hvd,btw +1測試用例由接受的答案處理。 – Neolisk