2011-07-24 11 views
5

मैं एक पासवर्ड सत्यापनकर्ता जो किसी भी चरित्र लेकिन व्हाइटस्पेस और कम से कम 6 अक्षर के साथ ले जाता है बना रहा हूं।नियमित अभिव्यक्ति किसी भी चरित्र है, लेकिन एक सफेद स्थान

सबसे अच्छा खोज करने के बाद मैं आया था यह इस उदाहरण है: What is the regular expression for matching that contains no white space in between text?

यह inbetween किसी भी रिक्त स्थान की अनुमति नहीं देता, लेकिन शुरू करने और एक अंतरिक्ष के साथ समाप्त होने की अनुमति नहीं है। मैं पारित स्ट्रिंग में किसी भी स्थान को अस्वीकार करना चाहता हूं।

मैं इस कोशिश की, लेकिन यह काम नहीं करता:

if (preg_match("/^[^\s]+[\S+][^\s]{6}$/", $string)) { 
    return true; 
} else { 
    return false; 
} 

धन्यवाद।

+2

गूंगा प्रश्न: आप उपयोगकर्ताओं को अपने पासवर्ड में स्थान का उपयोग करने से क्यों रोकना चाहते हैं? – Mike

उत्तर

6

कुछ इस तरह:

/^\S{6,}\z/ 

तरह उद्धृत किया जा सकता है:

preg_match('/^\S{6,}\z/', $string) 

सभी $ का उपयोग कर जवाब गलत हैं (कम से कम किसी विशेष झंडे के बिना)। यदि आप स्ट्रिंग के अंत में लाइन ब्रेक की अनुमति नहीं देना चाहते हैं तो आपको $ के बजाय \z का उपयोग करना चाहिए।

  • $ स्ट्रिंग के अंत या स्ट्रिंग (यदि कोई संशोधक उपयोग किया जाता है) स्ट्रिंग के
  • \z मैचों अंत (बहु मोड से स्वतंत्र)
के अंत में एक लाइन ब्रेक पहले से मेल खाता है

http://www.pcre.org/pcre.txt:

^   start of subject 
       also after internal newline in multiline mode 
\A   start of subject 
$   end of subject 
       also before newline at end of subject 
       also before internal newline in multiline mode 
\Z   end of subject 
       also before newline at end of subject 
\z   end of subject 
0

\S - किसी भी गैर-सफेद-अंतरिक्ष चरित्र से मेल खाता है। यूनिकोड चरित्र श्रेणियों के बराबर [^\f\n\r\t\v\x85\p{Z}]। यदि ईसीएमएस्क्रिप्ट-अनुपालन व्यवहार ईसीएमएस्क्रिप्ट विकल्प के साथ निर्दिष्ट है, \S[^ \f\n\r\t\v] के बराबर है।

स्ट्रिंग के शुरू होने से आप कर सकते हैं: ^[ \t]+, और अंत के लिए: [ \t]+$ (टैब और रिक्त स्थान)

ईटीए:

वैसे, आप [\S+] regex, मुझे लगता है कि आप देख रहे हैं: [\S]+

0

मुझे लगता है कि आप निम्न में से कोई रिक्त स्थान के साथ 1 चरित्र से अधिक समय किसी भी स्ट्रिंग से मेल खाएंगे का उपयोग कर ठीक किया जाना चाहिए:

^[^\s]+$ 

आप यहां परीक्षण देख सकते हैं: http://regexr.com?2ua2e

0

इसे आजमाएं। यह कम से कम 6 गैर व्हाइटस्पेस वर्णों से मेल खाएगा, इसके बाद किसी भी अतिरिक्त गैर व्हाइटस्पेस वर्णों का मिलान होगा।

^[^\s]{6}[^\s]*$ 
9

सरल अभिव्यक्ति:

^\S{6,}$ 

^ स्ट्रिंग के शुरू होने से किसी भी गैर-सफ़ेद चरित्र
{6,} का मतलब 6 या अधिक
$ स्ट्रिंग के अंत का मतलब है इसका मतलब है
\S मैचों

इन पीएचपी, उस तरह

preg_match('/^\S{6,}$/', $string) 

संपादित दिखेगा:

>> preg_match('/^\S{6,}$/', "abcdef\n") 
1 
>> preg_match('/^\S{6,}\z/', "abcdef\n") 
0 
>> preg_match('/^\S{6,}$/D', "abcdef\n") 
0 

Qtax सही है। अच्छा निर्णय! यद्यपि आप एक HTML <input type="text"> से इनपुट ले रहे हैं, तो शायद आपके पास इसमें कोई नईलाइन नहीं होगी।

+1

-1, गलत, इस मामले में '$' का उपयोग न करें, मेरा जवाब देखें। – Qtax