簡體   English   中英

正則表達式不匹配字符串C#中的連續數字

[英]Regex to not match consecutive numbers in a string c#

我的要求是強制執行密碼策略,該策略包含不具有連續數字的規則,即不允許使用“ 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”等。

如果您確實想不想連續增加或減少數字,那么我將在不使用正則表達式的情況下執行以下操作。

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 ,如果你真的是指任何連續的數字。

這是一個正則表達式,用於檢測數字是升序還是降序。

^((?: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?)$

正則表達式可視化

Debuggex演示

暫無
暫無

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

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