[英]Regex. Up to six digits after separator but not all zeros
我需要以這種形式輸入:
第一位數ist始終為0
第二是永遠。 要么 ,
最多六位數字,但只能是數字,而不是字母或其他符號,也不是全零
private const string Pattern = @"^0(,|.)(?!0+$)+";
var regex = new Regex(Pattern, RegexOptions.IgnoreCase);
if (!regex.IsMatch(inputToCheck))
{...}
這適用於所有條件,只有數字除外。 該輸入也應被禁用:“ 0,01a”,“ 0.01a1”,“ 0,01a0”
如何將我的正則表達式模式擴展到這種情況?
有效和無效輸入的一些示例。
有效:
0,123456
0,01
0,010
0,2
無效:
1,123456
2,123456
0,0
0,00
0,000
一種
1
0,01a
0,01a1
0,01a0
我認為您在正確的軌道上。 這是我的解決方案:
^0[,.](?!0+$)\d{1,6}$
這將確保第一個數字為零。 然后,它檢查下一個字符是逗號還是點。 然后,使用前瞻性確保對象字符串的其余部分不完全為零。 如果通過,它將檢查其余字符是否全部為數字。
您可以使用以下正則表達式:
^0[.,][1-9]{0,6}$
當然,這正則表達式不允許0
后,
或.
。 如果要允許0
但限制以0
結尾,則可以執行以下操作:
^0[.,][0-9]{0,5}[1-9]$
而且,您可以將其縮短一點:
^0[.,]\d{0,5}[1-9]$
試試這個表情
^^0(,|.)([0-9]{1,4}$)+
您實際上不應該使用正則表達式來解析數字,而是可以通過僅將其驗證為數字來實現。
CultureInfo culture = new CultureInfo("de-DE");
string[] inputs = new string[]{"0,123456",
"0,01",
"1,123456",
"0,0"};
foreach(var input in inputs)
{
double val;
if(Double.TryParse(input, NumberStyles.Number, culture, out val)
&& Math.Round(val, 6) == val
&& val != 0.0
&& (int)val == 0)
Console.WriteLine("{0} is valid", input);
else
Console.WriteLine("{0} is invalid", input);
}
輸出量
0,123456有效
0,01有效
1,123456無效
0,0無效
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.