2010-06-28 17 views
7

मैं की जरूरत है मजबूत पासवर्ड सत्यापन regexमजबूत पासवर्ड regex

Special Characters - Not Allowed 
Spaces - Not Allowed 
Numeric Character - At least one character 
At least one Capital Letter 
Minimum and Maximum Length of field - 6 to 12 Characters 
Repetitive Characters - Allowed only two repetitive characters 

मेरी Regex ^(?=.*\d)(?=.*[a-z])(?=.*[A-Z])(?!.*\s)(?=(?:(\w)(?!\1{2}))+).{6,12}$ है लेकिन यह विशेष वर्ण पर ध्यान नहीं देता (जहां जोड़ने के लिए?)

कृपया मदद!

+12

क्या विश्वास है कि एक नियमित अभिव्यक्ति इस समस्या को हल करने के लिए सबसे अच्छा तरीका था आप का नेतृत्व किया? –

+7

आप रिक्त स्थान और विशेष पात्रों को क्यों अस्वीकार कर रहे हैं? क्या यह एक मजबूत के बजाय इसे * कमजोर * पासवर्ड regex नहीं बनाता है? आपके मानदंड भी उपयोगकर्ता को पासफ्रेज (शब्दों की एक श्रृंखला, सामान्य पासवर्ड से अधिक लंबा) दर्ज करने की अनुमति नहीं देते हैं क्योंकि आपको अंक, कोई रिक्त स्थान की आवश्यकता नहीं होती है, और पासवर्ड की लंबाई सीमित होती है। – Douglas

+0

डगलस, विशेष पात्रों को केवल अनुमति दी गई है (@) हालांकि: *, -, + आदि को विशेष पात्रों की अनुमति नहीं है। यह एक कार्य है :) – Maxim

उत्तर

24
^(?=.*[A-Z])(?=.*\d)(?!.*(.)\1\1)[[email protected]]{6,12}$ 
  • विशेष वर्ण खोज सकते हैं - की अनुमति नहीं
  • रिक्त स्थान - अनुमति नहीं
  • न्यूनतम और मैदान की अधिकतम लंबाई - 6 से 12 वर्ण
    [[email protected]]{6,12}
  • से मुलाकात की
  • संख्यात्मक चरित्र - कम से कम एक वर्ण
    से positive lookahead(?=.*\d)
  • कम से कम एक पूंजी पत्र
    मेट मेट सकारात्मक अग्रदर्शी द्वारा (?=.*[A-Z])
  • दोहराए वर्ण - अनुमति केवल दो दोहराए पात्रों
    मुझे यकीन है कि आप इस से क्या मतलब है नहीं कर रहा हूँ। ऋणात्मक लुकहेड (?!.*(.)\1\1) सुनिश्चित करता है कि पंक्ति में दो बार से अधिक वर्ण प्रदर्शित होने की अनुमति नहीं है। सबस्ट्रिंग aa ठीक है, aaa नहीं है।
    इसे (?!.*(.+)\1\1) को एक से अधिक लंबाई (जैसे ababab) की बार-बार सबस्ट्रिंग को अस्वीकार करने के लिए बनाएं या .*\1 को गैर-निरंतर बार-बार प्रदर्शित होने से अस्वीकार करने के लिए भी जोड़ें।
+0

दोहराव वाले वर्ण - मेरा मतलब है: पैसवर्ड की अनुमति है, और पैसवर्ड या पासवर्ड की अनुमति नहीं है। मुझे इस मामले में क्या करने की ज़रूरत है? – Maxim

+0

मैं अभी भी जोर देता हूं कि मेरा कोड बहुत अधिक पठनीय/रखरखाव योग्य है! बह, हर चीज और कुछ भी के लिए regex। – Noldorin

+1

@ मैक्सिम ऐसा लगता है कि मेरी समझ सही थी। दिए गए रेगेक्स को यह करना चाहिए। – Amarghosh

29

विशेष रूप से रेगेक्स के लिए उपयुक्त कार्य की तरह नहीं लगता है, क्योंकि आप एक साथ कई स्थितियों का परीक्षण करना चाहते हैं। (आप एक से अधिक regexes इस्तेमाल कर सकते हैं, लेकिन फिर सामान्य सी # LINQ के साथ यह परीक्षण करने के लिए एक अच्छा तरीका है।) के बाद समारोह का प्रयास करें:

public static bool IsStrongPassword(string password) 
{ 
    // Minimum and Maximum Length of field - 6 to 12 Characters 
    if (password.Length < 6 || password.Length > 12) 
     return false; 

    // Special Characters - Not Allowed 
    // Spaces - Not Allowed 
    if (!(password.All(c => char.IsLetter(c) || char.IsDigit(c)))) 
     return false; 

    // Numeric Character - At least one character 
    if (!password.Any(c => char.IsDigit(c))) 
     return false; 

    // At least one Capital Letter 
    if (!password.Any(c => char.IsUpper(c))) 
     return false; 

    // Repetitive Characters - Allowed only two repetitive characters 
    var repeatCount = 0; 
    var lastChar = '\0'; 
    foreach(var c in password) 
    { 
     if (c == lastChar) 
      repeatCount++; 
     else 
      repeatCount = 0; 
     if (repeatCount == 2) 
      return false; 
     lastChar = c; 
    } 

    return true; 
} 

सुनिश्चित करें कि आप निश्चित रूप से System.Linq आयात करें, और आप जाने के लिए तैयार हैं।

+0

पुनरावर्तक पात्र? – Maxim

+0

शायद कोई उपरोक्त LINQ दृष्टिकोण को दो regexps के साथ जोड़ सकता है जो कि सामानों का परीक्षण करता है जो regexps पर अच्छे हैं? –

+1

@ मैक्सिम: संपादित, अब इसमें शामिल है। पुनरावर्तक वर्ण एकमात्र परीक्षण है I * हो सकता है * regex का उपयोग कर, लेकिन मुझे लगता है कि वर्तमान दृष्टिकोण अभी भी ठीक है। – Noldorin

2

Noldorin के जवाब में char.IsNumeric सी # के लिए char.IsDigit द्वारा प्रतिस्थापित किया जाना चाहिए/.NET 4.0

1

निम्नलिखित jQuery प्लगइन pwdMeter कहा जाता है काम करता है और उपयोगकर्ता को दिखाने के लिए एक अच्छा तरीका की तरह लगता है क्या है और एक मजबूत पासवर्ड क्या नहीं है।

http://shouvik.net/pwdmeter.php

+0

यह वास्तव में बहुत बढ़िया है – Eliseo