2012-06-12 21 views
5
<?php 

    $string = 'user34567'; 

      if(preg_match('/user(^[0-9]{1,8}+$)/', $string)){ 
       echo 1; 
      } 

?> 

मैं अगर स्ट्रिंग शब्द संख्या से उपयोगकर्ता इस प्रकार है कि 8 संकेतों अधिकतम किया जा सकता है की जांच करना चाहते।नियमित अभिव्यक्ति

उत्तर

10

आप बहुत करीब वास्तव में कर रहे हैं:

if(preg_match('/^user[0-9]{1,8}$/', $string)){ 

"स्ट्रिंग के शुरू में से मेल खाना चाहिए" सामने सभी तरह, "उपयोगकर्ता" के बाद किया जाना चाहिए के लिए लंगर शाब्दिक; फिर आप वर्ण सेट [0-9] और गुणक {1,8} निर्दिष्ट करते हैं। अंत में, आप "स्ट्रिंग के अंत में मिलान होना चाहिए" एंकर के साथ समाप्त हो जाते हैं।

अपने मूल अभिव्यक्ति पर कुछ टिप्पणियां:

  1. ^ एक स्ट्रिंग की शुरुआत से मेल खाता है, तो यह अभिव्यक्ति के अंदर कहीं और इसे लिखने लेकिन शुरुआत अपेक्षित परिणाम
  2. + है उत्पन्न नहीं करेंगे एक गुणक; {1,8} एक भी है, लेकिन अभिव्यक्ति के बाद केवल एक गुणक का उपयोग किया जा सकता है
  3. जब तक आप अभिव्यक्ति में प्राप्त संख्याओं का उपयोग करने का इरादा नहीं रखते हैं, तो आपको कोष्ठक की आवश्यकता नहीं है।

बीटीडब्ल्यू, [0-9] के बजाय आप \d का भी उपयोग कर सकते हैं। यह एक स्वत: चरित्र समूह है कि नियमित अभिव्यक्ति को घटा देती है, हालांकि यह विशेष रूप से एक को बचाने नहीं करता है सब बहुत अधिक वर्ण ;-)

2

आप करीब थे, यहाँ regex है: /^user[0-9]{1,8}$/

1

बजाय निम्नलिखित regex का प्रयास करें: इस regex

/^user([0-9]{1,8})$/

3

का उपयोग करकेऔर $, आप केवल तभी मेल खाते हैं जब पैटर्न लाइन पर एकमात्र चीज है। क्या तुम यही चाहते हो? यदि हां, तो निम्न का उपयोग करें: यदि आप एक पंक्ति में कहीं भी इस पैटर्न को खोजने के लिए चाहते हैं

preg_match('/^user[0-9]{1,8}[^0-9]$/' , $string); 

, मैं कोशिश करेंगे:

preg_match('/user[0-9]{1,8}[^0-9]/' , $string); 

हमेशा की तरह, तुम क्या करने RegexPal की तरह एक संदर्भ उपकरण का उपयोग करना चाहिए अलगाव में आपका नियमित अभिव्यक्ति परीक्षण।