簡體   English   中英

正則表達式以驗證百分比

[英]Regular expression to validate percentage

我想驗證輸入字符串

5.0  is correct 
5.5% is correct 

所以我開始使用以下代碼:

string decimalstring1 = "10000.55";
string decimalstring2 = "5%5%";

string expression = @"^\d|\d%";

Regex objNotNumberPattern = new Regex(expression);

Console.WriteLine(objNotNumberPattern.IsMatch(decimalstring1));
Console.WriteLine(objNotNumberPattern.IsMatch(decimalstring2));
Console.ReadLine();

但問題是如果輸入像5%5%那么它就是correct

如何修改此表達式以使其工作?

string[] inputs = new string[] {
    "1000.55",
    "1000.65%",
    "100",
    "100%",
    "1400%",
    "5.5",
    "5.5%",
    "x",
    ".%"
};

string expression = @"^\d+[.]?\d*%?$";

Regex objNotNumberPattern = new Regex(expression);
foreach (var item in inputs)
Console.WriteLine(objNotNumberPattern.IsMatch(item));

UPDATE

string expression = @"^(\d+|\d+[.]\d+)%?$";

您獲得部分匹配,因為您的表達式不會錨定雙方。 你的正則表達式錨定了開始,但不是匹配的結束。

而且,左錨點^的放置是不正確的,因為它僅適用於左子表達式

在最后添加$應該有助於:

^(\d|\d%)$

但是,這不是最理想的:因為兩個表達式的前綴相同,並且它們的可選后綴% ,您可以使用%? 簡化表達式:

^\d+%?$

這樣更好,但它不會與小數點匹配。 要添加此功能,請按如下所示更改表達式:

^(\d+|\d*[.]\d+)%?$

您的表達式如下:當您找到以下任一項時匹配:輸入字符串開頭的單個數字,或任何地方的單個數字,后跟%。 可能不是你想要的。 我會嘗試這樣的事情:

var expression = @"^\d+(\.\d+)?%?$";

這將轉換為:匹配字符串開頭的正數位數,可選地后跟一個點和任意數量的數字(小數部分),可選地以%符號結尾。

你可以嘗試這個^\\d+([.]\\d+)?%?$它適用於:(已測試)

1000.55
1000.65%
100
100%
1400%
5.5
5.5%

希望能幫助到你!

我認為這是最好的一個:

^\d{0,2}(\.\d{1,4})? *%?$

來源: 這里

這對我有用:

/(^100([.]0{1,2})?)$|(^\d{1,2}([.]\d{0,2})?)$/

只有兩位小數且不超過100 [0.00 - 100.00]

暫無
暫無

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

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