2011-06-09 17 views
5

मैं 4 और 138 वर्णों के बीच एक टेक्स्टरेरा की सामग्री को फिर से जोड़ने की कोशिश कर रहा हूं।केवल लंबाई के लिए नियमित अभिव्यक्ति - किसी भी वर्ण

मेरे नियमित अभिव्यक्ति यह है: - "।" '/^.{4,138}$/'

लेकिन मैं उपयोगकर्ता वापसी वर्ण, जो मेरा मानना ​​है कि शामिल करने के लिए सक्षम होना चाहते हैं उन्हें करने से रोकता है। मुझे क्या बदलने की ज़रूरत है?

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

जाहिर है दूसरे तरीके भी पाठ की लंबाई प्राप्त करने के लिए कर रहे हैं - strlen ... आदि, लेकिन मैं विशेष रूप से जांच की प्रकृति के कारण regex के लिए देख रहा हूँ (यानी एक प्लगइन है कि रेगेक्स की आवश्यकता है)

उत्तर

6

मैं चाहता हूं कि उपयोगकर्ता वापसी पात्रों को शामिल करने में सक्षम हो, जो मुझे विश्वास है। " उन्हें करने से रोकता है। मुझे क्या बदलने की ज़रूरत है?

कोई एक:

  • परिवर्तन .[\s\S]-
  • SINGLE_LINE (उर्फ DOTALL) regex flag/…/s का उपयोग (सफेद स्थान को/नई-पंक्तियों \s का हिस्सा हैं, सभी बाकी \S का हिस्सा है)
+0

[\ s \ S] काम करता है - धन्यवाद! :) – Dave

6

आप strlen का उपयोग कर स्ट्रिंग लम्बाई क्यों नहीं देखते हैं? यह रेगेक्स करने से कहीं अधिक कुशल होगा। इसके अलावा, आप सार्थक त्रुटि संदेश दे सकते हैं।

$length = strlen($input); 

if ($length > 138) 
    print 'string too long'; 
else if ($length < 4) 
    print 'string too short'; 
+0

यह एक प्लगइन के माध्यम से बनाया कोड है - गैर regex करने के लिए इसे बदल कर, मैं प्लगइन rewirte होगा। – Dave

+0

(मेरा प्रश्न "PHP में एक स्ट्रिंग की लंबाई कैसे प्राप्त करें" नहीं था - यह विशेष रूप से नियमित अभिव्यक्ति के लिए कहा जाता था।) – Dave

+0

वाह। यह प्लगइन पर खराब डिजाइन है। –

1

प्रयास करें '/^.{%d,%d}$/s' रूप में अच्छी तरह . मैच नई-पंक्तियों के लिए।

1

या तो

/^.{4,138}$/s 

या

/^[\s\S]{4,138}$/ 

नई-पंक्तियों से मेल खाएगी।

s ध्वज इंजन को एक ही पंक्ति के रूप में पूरी तरह से इलाज करने के लिए इंजन बताता है, इसलिए .\n से मेल खाएगा जो इसके साथ आमतौर पर मेल खाता है। ध्यान दें कि यह भी ^ और $ शुरुआत और पूरी स्ट्रिंग (बल्कि बस शुरुआत/प्रत्येक लाइन के अंत की तुलना में) के अंत में मैच के लिए जब तक आप भी m ध्वज का उपयोग का कारण बनता है।

Here's some more info on regex flags.

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