繁体   English   中英

正则表达式以匹配数字或特定字符串(即“全部”)

[英]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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM