2011-04-08 11 views
7

में एक स्पेस कैरेक्टर की अनुमति देता है हे सब, इसलिए मैं कुछ पाठ इनपुट को अनुमति देने की कोशिश कर रहा हूं जो इसे भेजने से पहले रेगेक्स चेक के माध्यम से जाता है। मैं चाहता हूं कि टेक्स्ट में केवल ए-जेड, 0-9, और स्पेस कैरेक्टर शामिल हो। यहाँ मेरी कोड है:रेगेक्स जावा

if(!title.matches("[a-zA-Z0-9_]+") { 
    //fail 
} 
else { 
    //success 
} 

हालांकि यह अभी भी //fail परिणाम देता है जब मैं की तरह "यह एक परीक्षण है" इनपुट कुछ

कोई भी विचार? सबको शुक्रीया।

उत्तर

19

आप रेगेक्स में जगह शामिल नहीं कर रहे हैं। निम्नलिखित का प्रयास करें:

if (!title.matches("[a-zA-Z0-9 ]+")) 
+0

आह ... मैंने सोचा कि _ _ को दर्शाया गया है। तो बस '[ए-जेए-जेड -9] 9' काम करना चाहिए? – JMRboosties

+0

हां। '_' शाब्दिक अंडरस्कोर है। ऐसा लगता है कि आप नहीं चाहते हैं। मैंने अपना उदाहरण अपडेट किया है। –

+1

बिल्कुल सही। आपका बहुत बहुत धन्यवाद। – JMRboosties

3

\s किसी भी ASCII खाली स्थान के चरित्र के लिए अनुमति देता है। इसके बजाए इसका उपयोग करने पर विचार करें।

if(!title.matches("[a-zA-Z0-9_\s]+")) { 
    //fail 
} 
else { 
    //success 
} 
+3

नहीं, '\ s' केवल 7-बिट डेटा के लिए है। यह जावा के मूल चरित्र सेट पर काम नहीं करता है। – tchrist

+0

यह मेरे लिए खबर है! मुझे लगता है कि मुझे थोड़ा और सावधान रहना चाहिए। –

+1

मानक जावा रीगेक्स लाइब्रेरी के साथ यह समस्या है। यह जावा के अपने चरित्र सेट के साथ काम नहीं करता है! आपको जेसीआई को आईसीयू के लिए सही तरीके से काम करने के लिए जेएनआई करना है - जिसका मतलब है कि, न्यूनतम न्यूनतम के रूप में, बुनियादी यूनिकोड कार्यक्षमता के लिए स्तर 1 आवश्यकताओं का अनुपालन करता है जिसे [यूटीएस # 18 यूनिकोड नियमित अभिव्यक्तियां] (http://unicode.org/reports/tr18/)। जावा उन लोगों में से अधिकांश को पूरा नहीं करता है, स्तर 2 या स्तर 3 भूमि में कुछ भी आगे बढ़ने दें। यही कारण है कि Google एंड्रॉइड के लिए जेएनआई-टू-आईसीयू चीज करता है। उन्हें यूनिकोड समर्थन की आवश्यकता है। – tchrist

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