我想验证输入字符串
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
如何修改此表达式以使其工作?
答案 0 :(得分:4)
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));
<强>更新强>
string expression = @"^(\d+|\d+[.]\d+)%?$";
答案 1 :(得分:1)
您获得部分匹配,因为您的表达式不会锚定双方。你的正则表达式锚定了开始,但不是匹配的结束。
此外,左锚^
的位置不正确,因为它仅适用于左子句
最后添加$
会有所帮助:
^(\d|\d%)$
但是,这不是最理想的:由于两个表达式的前缀相同,并且它们因可选后缀%
而不同,因此您可以使用%?
来简化表达式:
^\d+%?$
这样更好,但它不会与小数点匹配。要添加此功能,请按如下所示更改表达式:
^(\d+|\d*[.]\d+)%?$
答案 2 :(得分:1)
您的表达式如下:当您找到以下任一项时匹配:输入字符串开头的单个数字,或任何地方的单个数字,后跟%。可能不是你想要的。我会尝试这样的事情:
var expression = @"^\d+(\.\d+)?%?$";
这将转换为:匹配字符串开头的正数位数,可选地后跟一个点和任意数量的数字(小数部分),可选地以%符号结尾。
答案 3 :(得分:0)
您可以尝试使用^\d+([.]\d+)?%?$
:(已测试)
1000.55
1000.65%
100
100%
1400%
5.5
5.5%
希望它有所帮助!
答案 4 :(得分:0)
答案 5 :(得分:0)
这对我有用:
/(^100([.]0{1,2})?)$|(^\d{1,2}([.]\d{0,2})?)$/
只有两位小数且不超过100 [0.00 - 100.00]