簡體   English   中英

正則表達式。 分隔符后最多六位數,但不全為零

[英]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無效

IDEOne范例

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM