C# 验证百分比的正则表达式
我想验证输入字符串,以便C# 验证百分比的正则表达式,c#,regex,C#,Regex,我想验证输入字符串,以便 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(objNotNumberPatte
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
如何修改此表达式以使其生效?您将获得部分匹配,因为您的表达式不会锚定两侧。你的正则表达式锚定比赛的开始,但不是结束 此外,左锚点
^
的位置不正确,因为它仅适用于左子表达式
在末尾添加一个$
将有助于:
^(\d|\d%)$
但是,这是次优的:由于两个表达式的前缀相同,并且它们的不同之处在于可选的后缀%
,因此可以使用%?
简化表达式:
^\d+%?$
这样更好,但与小数点不匹配。要添加此功能,请按如下所示更改表达式:
^(\d+|\d*[.]\d+)%?$
表达式如下所示:当您找到以下任一项时匹配:输入字符串开头的一个数字,或任何位置的一个数字,后跟%。可能不是你想要的。我想试试这样的东西:
var expression = @"^\d+(\.\d+)?%?$";
这将转换为:匹配字符串开头的正数数字,可选后跟一个点和任意数量的数字(小数部分),可选以%符号结尾。您可以尝试此
^\d+([.]\d+?%?$,
它的工作原理是:(已测试)
希望有帮助
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+)%?$";
我认为这是最好的:
^\d{0,2}(\.\d{1,4})? *%?$
来源:这对我来说很有效:
/(^100([.]0{1,2})?)$|(^\d{1,2}([.]\d{0,2})?)$/
对于只有两个小数且不超过100[0.00-100.00]的情况,这与
X
(或任何其他单个字符)匹配。很抱歉,我忘了将点反斜杠!现在应该可以了。谢谢你的建议。更好,但它仍然会匹配,例如%
(除非是有意的)好的,再次更改它,现在不匹配%
。再次感谢@decpl乐于助人,一个人每天都在学习。顺便说一句-+
是{1,}
的简写。在学习过程中,我强烈推荐一些可视化工具,它可以动态地向您展示正在发生的事情。就我个人而言,我使用在线工具,如Regexero或debuggex。你的表情告诉我你正在独立地匹配每个数字,这会给你一个线索。@Tarec哇,这是一个测试正则表达式的令人印象深刻的网站!谢谢你的参考@Tarec你能定义一个不必要的组吗?我要反驳的是,|
替代方案会创建不必要的部分重复以匹配第一个数字,这在任何比单个\d+更复杂的情况下都可能变得难以维护。谢谢你知道如何在不使用percentageExtract的情况下提取小数部分吗?Mmm可能使用groups.if(Decimal.TryParse(s_input.Replace(“%”),out d_input)){decimalPart=d_input-(int)d_input;}
/(^100([.]0{1,2})?)$|(^\d{1,2}([.]\d{0,2})?)$/