2012-04-18 16 views
5

मेरे पास यह अभिव्यक्ति एक कोड स्निपेट में है जिसे मैंने ऑफ़लाइन उधार लिया था। यह नए उपयोगकर्ताओं को एक पासवर्ड रखने के लिए मजबूर करता है जो न केवल ऊपरी + निचले + संख्याओं की आवश्यकता होती है लेकिन वे उस क्रम में होनी चाहिए! अगर मैं निचले + ऊपरी + संख्याओं में प्रवेश करता हूं, तो यह विफल हो जाता है!preg_match में प्रतीकों का क्या अर्थ है?

if (preg_match("/^.*(?=.{4,})(?=.*[0-9])(?=.*[a-z])(?=.*[A-Z]).*$/", $pw_clean, $matches)) { 

Ive ऑनलाइन खोज की लेकिन मुझे कोई संसाधन नहीं मिला जो मुझे बताता है कि कुछ पात्रों का क्या अर्थ है। मैं देख सकता हूं कि पैटर्न preg_match ("/ कुछ अभिव्यक्ति /", yourstring, आपका मिलान है)।

क्या इन मतलब है:

1.^  - ??? 
2. .*   - ??? 
3. (?=.{4,}) - requires 4 characters minimum 
4. (?.*[0-9]) - requires it to have numbers 
5. (?=.*[a-z])- requires it to have lowercase 
6. (?=.*[A-Z])- requires it to have uppercase 
7. .*$  - ??? 
+0

रेग एक्स ट्यूटोरियल के लिए Google खोजें –

+0

आपके वास्तविक प्रश्न से संबंधित नहीं है, लेकिन पासवर्ड के लिए लोगों को अत्यधिक जटिल पैटर्न रखने के लिए मजबूर करना संभवतः उन्हें कहीं भी लिखना होगा - पासवर्ड की सुरक्षा को समाप्त करना। – jprofitt

+0

चूंकि आप इस PHP को टैग कर रहे हैं: http://php.net/manual/en/book.pcre.php –

उत्तर

13

यहाँ प्रत्यक्ष जवाब नहीं है। मैंने उन्हें छोटा रखा क्योंकि वे रेगेक्स की समझ के बिना समझ में नहीं आएंगे। यह समझ नियमित-expressions.info पर सबसे अच्छी तरह से प्राप्त की जाती है। मैं आपको सलाह देता हूं कि वहां सूचीबद्ध regex helper tools भी प्रयास करें, वे आपको प्रयोग करने की अनुमति देते हैं - जब आप पैटर्न को संपादित करते हैं तो लाइव कैप्चरिंग/मेलिंग देखें, बहुत उपयोगी।


1: कैरट ^ एक लंगर, इसका मतलब है "भूसे के ढेर/स्ट्रिंग/लाइन की शुरुआत है।"

  • एक कैरट एक चरित्र वर्ग [] अंदर पहले प्रतीक है, तो यह एक अलग अर्थ है: यह वर्ग को नकारता। (तो [^ab] में कैरट करता है कि वर्ग मैच जो कुछ भी अब नहीं है)

2: डॉट . और तारांकन * दो अलग-अलग प्रयोजनों की सेवा:

  • डॉट किसी भी एक वर्ण से मेल खाता है न्यूलाइन \n को छोड़कर।
  • तारांकन कहता है "शून्य या कई पूर्ववर्ती प्रकार की अनुमति दें"।

इन दो .* के रूप में जोड़ दिया जाता है जब यह मूल रूप से लिखा है "शून्य या कुछ भी की अधिक एक नई पंक्ति जब तक या किसी अन्य नियम प्रभाव में आता है"।

7: डॉलर $ विपरीत कार्य के साथ, देखभाल के समान एक लंगर भी है: "घास का अंत"।


संपादित करें:

सरल कोष्ठकों () कुछ चारों ओर बनाता है यह एक समूह। यहां आपके पास (?=) है जो एक दावा है, विशेष रूप से सकारात्मक आगे बढ़ने के लिए देखें। यह सब जांचता है कि क्या वास्तव में अंदर है जो वास्तव में हैरस्टैक में वर्तमान कर्सर स्थिति से आगे है। अभी तक मेरे साथ है?
उदाहरण:foo(?=bar) मैचों foo केवल bar के बाद। bar कभी मेल नहीं खाता है, केवल foo लौटा दिया गया है।

इस के साथ

मन में, चलो अपने रेगुलर एक्सप्रेशन से काटना करते हैं:

/^.*(?=.{4,})(?=.*[0-9])(?=.*[a-z])(?=.*[A-Z]).*$/ 

Reads as: 
     ^.* From Start, capture 0-many of any character 
    (?=.{4,}) if there are at least 4 of anything following this 
(?=.*[0-9]) if there is: 0-many of any, ending with an integer following 
(?=.*[a-z]) if there is: 0-many of any, ending with a lowercase letter following 
(?=.*[A-Z]) if there is: 0-many of any, ending with an uppercase letter following 
     .*$ 0-many of anything preceding the End 

आप बात पासवर्ड पात्रों के आदेश कहते हैं - यह मेरे परीक्षण में नहीं है। नीचे टेस्ट स्क्रिप्ट देखें। उम्मीद है कि यह एक या दो चीज़ों को मंजूरी दे दी है। आप देख रहे हैं एक और regex जो थोड़ा अधिक क्षमाशील है के लिए, जाँच और रेगुलर एक्सप्रेशन के परीक्षण के लिए regex password validation

<pre> 
<?php 
// Only the last 3 fail, as they should. You claim the first does not work? 
$subjects = array("aaB1", "Baa1", "1Baa", "1aaB", "aa1B", "aa11", "aaBB", "aB1"); 

foreach($subjects as $s) 
{ 
    $res = preg_match("/^.*(?=.{4,})(?=.*[0-9])(?=.*[a-z])(?=.*[A-Z]).*$/", $s, $matches); 
    echo "result: "; 
    print_r($res); 

    echo "<br>"; 
    print_r($matches); 
    echo "<hr>"; 
} 

उत्कृष्ट ऑनलाइन उपकरण देखें: https://regex101.com/

+0

Thx ccondrup। मुझे लगता है कि मैं आपकी व्याख्याओं को समझता हूं, लेकिन यदि यह बहुत अधिक परेशानी नहीं है, तो आईडी एक स्पष्टीकरण की तरह है कि क्यों पूर्ण अभिव्यक्ति मेरे पासवर्ड सत्यापन को जटिल बनाने के लिए काम करती है ... – marciokoko

+0

यह सुनकर अच्छा लगा कि यह समझ में आया। मैंने अपने उत्तर में और जोड़ा, देखें कि क्या – ccondrup

+0

'preg_match (। *?)' का अर्थ क्या है? – Neocortex

2

आप इस साइट पता नहीं है, तो आप वहाँ तुरंत जाना चाहिए।

यह नियमित अभिव्यक्तियों के बाइबल की तरह है।

Regular-expressions.info

1

पहले रेगुलर एक्सप्रेशन का उपयोग करने के लिए आप वाक्यविन्यास सीखने की जरूरत है । इस वाक्यविन्यास में अक्षरों, संख्याओं, बिंदुओं, हाइफ़न और विशेष संकेतों की एक श्रृंखला शामिल है, जिसे हम विभिन्न कोष्ठक का उपयोग करके एक साथ समूह कर सकते हैं।

इस लिंक को देखें Getting Started with PHP Regular Expressions। नियमित अभिव्यक्ति सीखने का एक आसान तरीका।

संबंधित मुद्दे