正则表达式不匹配字符串c#中的连续数字

时间:2016-05-03 11:27:53

标签: c# regex asp.net-mvc

我的要求是强制执行密码策略,其中包含不具有连续数字的规则,即" pass1234"," abc12"," 12tab"等等不应该被允许。我现在的正则表达式是:

if(!Regex.IsMatch(password,
                    @"^(?!(?:0(?=1)|1(?=2)|2(?=3)|3(?=4)|4(?=5)|5(?=6)|6(?=7)|7(?=8)|8(?=9)|9(?=0))\d{1,}|(?:0(?=9)|1(?=0)|2(?=1)|3(?=2)|4(?=3)|5(?=4)|6(?=5)|7(?=6)|8(?=7)|9(?=8))\d{1,})[a-zA-Z\d]+$")))

但是上面的正则表达式匹配以数字开头的字符串,即" 12abc"," 12pass"但不是字符串之间包含数字的字符串,如" ab12pass"," pass1234"等

2 个答案:

答案 0 :(得分:0)

如果你真的意味着你不想要连续增加或减少数字,那么我将如何在不使用正则表达式的情况下执行此操作。

private static bool NoConsecutiveIncreasingOrDecreasingNumbers(string str)
{
    if (string.IsNullOrWhiteSpace(str))
        return true;

    char prev = str[0];
    for (int i = 1; i < str.Length; i++)
    {
        char current = str[i];
        if ('0' < current && current < '9' && 
            '0' < prev && prev < '9' && 
            (prev + 1 == current || current + 1 == prev ))
            return false;
        prev = current;
    }

    return true;
}

如果您确实意味着任何连续的数字,请删除if中的最后一个条件。

答案 1 :(得分:0)

这是一个用于检测是否有升序或降序数的正则表达式。

^((?:0(?=1|$))?(?:1(?=2|$))?(?:2(?=3|$))?(?:3(?=4|$))?(?:4(?=5|$))?(?:5(?=6|$))?(?:6(?=7|$))?(?:7(?=8|$))?(?:8(?=9|$))?9?|(?:9(?=8|$))?(?:8(?=7|$))?(?:7(?=6|$))?(?:6(?=5|$))?(?:5(?=4|$))?(?:4(?=3|$))?(?:3(?=2|$))?(?:2(?=1|$))?(?:1(?=0|$))?0?)$

Regular expression visualization

Debuggex Demo