2016-05-03 32 views
0

我的要求是執行其中包含的規則不具有連續的數字,即「pass1234」,「ABC12」,「12tab」等應不允許使用的密碼策略。我目前正則表達式是:正則表達式不匹配的對象連續編號C#

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」等。

回答

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如果你真的沒表示任何連續的數字。

+0

所有其它規則使用正則表達式所定義。 – Siddharth

+0

@Siddharth您可以隨時使用正則表達式進行一次檢查,而使用常規代碼檢查另一次。試圖創建一個怪物正則表達式是恕我直言,很難維護。 – juharr

+0

以上方法奏效。非常感謝! – Siddharth

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

+0

上述正則表達式如何處理密碼,即如果該字符串包含例如數字以外的字符。 pass1234 – Siddharth

+0

@Siddharth如果您在開始時刪除^,您可以在數字前面添加字符,並且如果您在末尾刪除$,則可以在數字後面添加字符。 –

+0

@Siddharth在這裏你有一個例子:https://www.debuggex.com/r/QmBnXgux7dunAUHv –