簡體   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