这听起来很简单,但我的正则表达式知识有限。
我需要一个表达式来匹配十进制数字或字符串“all”,就像在范围验证器中一样,它允许单词all表示最大范围。
我觉得这样的事情可能有用:
((^[-+]?\d*\.?\d*)|any)
但上述内容对“任何”都不起作用。
答案 0 :(得分:2)
这是一个不使用正则表达式的解决方案。
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”,“aLl”还是大写和小写字母的任何其他组合。
答案 1 :(得分:1)
试试这个
(((-|\+)?\d+\.?\d*)|any)
答案 2 :(得分:1)
使用|
,正则表达式引擎可能会逐个检查每种可能性,如果找到匹配则立即返回。
自子表达式
(^[-+]?\d*\.?\d*)
匹配空字符串,|
的LHS将始终成功,因此any
部分将始终被忽略。
你应该让这部分不匹配一个空字符串,例如
(^[-+]?(?:\d+\.?\d*|\.\d+))