正则表达式。分隔符后最多六位数,但不是全零

时间:2015-03-02 13:38:59

标签: c# regex

我需要以这种形式输入:

第一位数字总是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
a a,1
0,01a
0,01a1
0,01a0

4 个答案:

答案 0 :(得分:3)

我认为你正走在正确的轨道上。这是我的解决方案:

^0[,.](?!0+$)\d{1,6}$

这将确保第一个数字为零。然后它检查下一个字符是逗号还是点。然后,使用前瞻,它确保主题字符串的其余部分不完全为零。如果通过,则检查剩余的字符是否都是数字。

答案 1 :(得分:2)

你可以使用这样的正则表达式:

^0[.,][1-9]{0,6}$

Regular expression visualization

当然,此正则表达式不允许在0,之后.。如果您想允许0但限制以0结尾,则可以执行以下操作:

^0[.,][0-9]{0,5}[1-9]$

你也可以将它缩短一点:

^0[.,]\d{0,5}[1-9]$

答案 2 :(得分:1)

试试这个表达

^^0(,|.)([0-9]{1,4}$)+

答案 3 :(得分:1)

您不应该使用正则表达式来解析数字,您可以通过将其验证为数字来实现。

    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 example