[英]Regex to match number or specific string (i.e. “all”)
这听起来很简单,但是我的正则表达式知识有限。
我需要一个表达式来匹配十进制数或字符串“ all”,例如在范围验证器中,该单词允许all代表最大范围。
我认为这样可能有效:
((^[-+]?\d*\.?\d*)|any)
但是以上内容不适用于“任何”。
这是不使用正则表达式的解决方案。
private static bool IsNumberOrGivenString(string number, string text, CultureInfo culture)
{
double result;
if (double.TryParse(number, NumberStyles.Float, culture, out result))
{
return true;
}
return number.Equals(text, StringComparison.OrdinalIgnoreCase);
}
private static bool IsNumberOrGivenString(string number, string text)
{
return IsNumberOrGivenString(number, text, CultureInfo.InvariantCulture);
}
样品使用:
Console.WriteLine(IsNumberOrGivenString("898", "all")); // true
Console.WriteLine(IsNumberOrGivenString("all", "all")); // true
Console.WriteLine(IsNumberOrGivenString("whatever", "all")); // false
Console.WriteLine(IsNumberOrGivenString("898,0", "all", CultureInfo.GetCultureInfo("sv-SE"))); // true
Console.WriteLine(IsNumberOrGivenString("898,0", "all", CultureInfo.GetCultureInfo("en-US"))); // false
与使用正则表达式相比,此代码的好处是(可以)使用所使用的任何十进制符号(以本地化方式)运行。 如果有数字,也将使数字失败.
当该字符不是有效的小数点分隔符时。
因为字符串比较忽略大小写,所以它也将匹配单词“ all”,而不管它是“ all”,“ All”,“ alL1”还是任何其他大小写字母组合。
尝试这个
(((-|\+)?\d+\.?\d*)|any)
与|
正则表达式引擎可能会逐一检查每种可能性,如果找到匹配项,则立即返回。
自子表达式
(^[-+]?\d*\.?\d*)
匹配一个空字符串, |
的LHS 将始终成功,因此any
部分都将始终被忽略。
您应该使该部分不匹配空字符串,例如
(^[-+]?(?:\d+\.?\d*|\.\d+))
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.