2010-07-11 18 views
8

मैं इस का उपयोग कर रहा: if(!preg_match('/^+[0-9]$/', '+1234567'))preg_match: दोहराने के लिए कुछ भी नहीं/कोई मुकाबला नहीं

और हो रही है:

चेतावनी:() के [function.preg मैचों]: संकलन विफल रहा है: कुछ भी नहीं है ऑफसेट पर दोहराने के लिए 1

कोई विचार क्यों?


अद्यतन: अब इस का उपयोग करते हुए: if(!preg_match('/^\+[0-9]$/', '+1234567'))

और कोई मुकाबला नहीं हो रही है।

कोई विचार क्यों?

उत्तर

20

+ एक विशेष चरित्र है जो पिछले चरित्र के 1 या अधिक को इंगित करता है, और इसे से बचकर आप इसे देखभाल में लागू कर रहे हैं। इसे \ से बचें और यह एक शाब्दिक प्लस चिह्न से मेल खाएगा।

if(!preg_match('/^\+[0-9]$/', '+1234567')) 

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

कारण है कि यह मेल नहीं खाती है क्योंकि आप 0-9 से 1 अंकों और $ साथ स्ट्रिंग के अंत निर्दिष्ट है। आपको इसे अंकों की एक परिवर्तनीय मात्रा बनाने की आवश्यकता है।

if(!preg_match('/^\+[0-9]+$/', '+1234567')) { 

छोटा संस्करण:

if(!preg_match('/^\+\d+$/', '+1234567')) { 
+0

चीयर्स, वर्तमान समस्या को दर्शाने के लिए अब प्रश्न संपादित किया है। – Hailwood

+0

हैलवुड, आपको पुरानी समस्या को दूर नहीं करना चाहिए, लेकिन दोनों को एक साथ दिखाना चाहिए। (बस ऐसा करने के लिए संपादित)। –

+0

इसके अलावा, वर्तमान समस्या सही व्यवहार है - आप एक एकल प्लस, एक 0..9 से मिलान करने के लिए रेगेक्स से पूछ रहे हैं, फिर लाइन स्थिति का अंत ढूंढें, जो आपका इनपुट नहीं करता है। अपने आपूर्ति किए गए इनपुट से मेल खाने के लिए आप या तो '^ \ + [0-9] + $' या '^ \ + [0-9] {7} $' या इसी तरह के चाहते हैं। –

3

'/^\+[0-9]$/' मतलब यह है कि लाइन की शुरुआत धन चिह्न एक संख्या से folowed तो पंक्ति के अंत हो गया है।

'/^\+[0-9]+$/' का मतलब है कि लाइन की शुरुआत द्वारा एक या अधिक संख्याओं के अंतराल के साथ प्लस साइन होना चाहिए।

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