[英]Validate a string using regular expressions - 1-30 with up to 2 decimal places
如標題所示,我需要一個可以驗證輸入字符串的正則表達式,以確保它是1-30到2個小數位之間的數字。
例如,
4 is fine
10.25 is fine
15.3 is fine
29.99 is fine
30 is fine
30.01 is not fine
編輯:所以由於我使用的系統的限制,它必須是一個正則表達式,我已經嘗試了幾件事,
我可以做到
^\d{1,2}(\.\d{1,2})?$
最多允許2位數字,最多2位小數。
編輯:對於您需要正則表達式的特定情況,請嘗試以下操作:
^(?!0)(30(\\.0{1,2})?|[12]?\\d(\\.\\d{1,2})?)$
分解:
^ ... $
-確保正則表達式在字符串的開頭和結尾處開始和結束。
(?!0)
-負前瞻以確保我們不以0開頭
(30(\\.0{1,2})?
-30(可選),后跟.0或.00
|
要么...
[12]?
僅1或2的十位數
\\d
1個非可選單位數字
(\\.\\d{1,2})?
可選的.digit或.digitdigit
不幸的是,此正則表達式不容易調整以適合任何范圍的數字。 (寫一個程序來自動吐出這樣的正則表達式將是一個有趣的項目。)
否則我會說:不要重新發明輪子。
double result;
if (double.TryParse(inputstring, out result))
{
if (result >= 1.0 & result <= 30.0)
{
return true;
}
}
return false;
如果不是兩位小數並且需要,可以計算Round(result, 2)
。
盡管可以編寫單個正則表達式來測試上述所有條件,但我不會這樣做。
我將首先使用正則表達式檢查小數點后的位數,然后在解析字符串后將范圍測試留給。
下面此正則表達式將允許小數點后0〜2個位數(例如1.20
, 1.
, 1.1
, 2
)。 請注意情況1.
如果您不希望這種情況,請將{0,2}
更改為{1,2}
^\d+(\.\d{0,2})?$
請注意,上述正則表達式將.2
視為無效,因為該正則表達式可確保整個部分始終包含至少1位數字。
驗證字符串后,您可以解析數字並檢查其范圍,就像在Patashu的答案中一樣。
應該這樣做:
^([12]?\d(\.\d{2})?|30(\.\d{2})?)$
[12]?\\ d(。\\ d {2})? -這表示從1到29.99或30.00或30的數字
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.