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