php - Would this regular expression work? -


  ^ ([a-zA-Z0- 9! @ # $% ^ & Amp; * | () _ \ - + = \ [\] {}:; \ "', & lt;। & Gt;? \ / ~`] {4,} $ $  

क्या ये नियमित अभिव्यक्ति ये नियम हैं?

  • कम से कम 4 अक्षर होने चाहिए
  • वर्ण वर्णमाला (कैपिटलाइज्ड / नॉन-कैपिटलाइज्ड), संख्यात्मक, और निम्न वर्णों का मिश्रण हो सकता है:! @ # $% ^ & Amp; * () _ - + = | [{}}:: '', & lt; । >? /

इसका उद्देश्य एक पासवर्ड सत्यापनकर्ता है। भाषा PHP है।

हाँ?

ईमानदारी से, आप क्या पूछ रहे हैं ? यदि आप इसे सुधारने पर सुझाव चाहते हैं, तो कुछ प्रश्न:

  1. इस रीजेक्स की जांच क्या है?
  2. आपको अनुमति वाले वर्णों का इतना बड़ा समूह क्यों है?
  3. आप / \ w / के बजाय / 0-9a-zA का उपयोग क्यों नहीं करते हैं -Z _ / ?
  4. आपके पास () s में पूरी चीज क्यों है? आपको पूरी चीज पर कब्जा करने की आवश्यकता नहीं है, क्योंकि आपके पास पहले से पूरी चीज है, और उन्हें समूह के लिए जरूरी नहीं है।

मैं क्या करूँगा लंबाई की अलग-अलग जांच कर, और उसके बाद एक regex के खिलाफ की जाँच करें कि क्या उसे बुरा वर्ण हैं? आपके अच्छे पात्रों की सूची पर्याप्त रूप से बड़ी है क्योंकि यह उस तरीके से करना आसान हो सकता है। पर यह निर्भर करता है कि आप इसके लिए क्या कर रहे हैं।

संपादित करें: अब जब मुझे पता है कि यह PHP- केंद्रित है, / \ w / सुरक्षित है क्योंकि पीपीआर पीसीआर का उपयोग करता है लाइब्रेरी, जो वास्तव में पर्ल नहीं है, और पीसीई में, \ w यूनिकोड शब्द वर्णों को मेल करेगा नहीं । इस प्रकार, लंबाई की जांच क्यों न करें और यह सुनिश्चित करें कि कोई अमान्य वर्ण नहीं हैं:

  यदि (strlen ($ string)> = 4 & amp; amp; amp; और preg_match ('[\ s ~ \\] ', $ स्ट्रिंग) == 0) {# वैध पासवर्ड}  

वैकल्पिक रूप से, कम-उपयोग की जाने वाली POSIX वर्ण वर्ग [[graph:]] का उपयोग करें। इसे PHP में बहुत अधिक कार्य करना चाहिए क्योंकि यह पर्ल में है [[: ग्राफ:]] किसी भी अल्फ़ान्यूमेरिक या विराम चिह्न का मिलान करता है, जो आप की तरह लगता है, और [[: ^ graph:]] के विपरीत होना चाहिए परीक्षण करने के लिए कि सभी वर्ण ग्राफ़ से मेल खाते हैं:

  preg ('^ [[: graph:]] + $', $ string) == 1  

परीक्षण करने के लिए कि कोई भी अक्षर ग्राफ़ से मेल नहीं खाता:

  preg ('[[: ^ graph:]]', $ string) == 0  

Comments