2011-11-09 12 views
5

मैं स्वीकृत वर्णों की जाँच करने के लिए निम्न विधि है में काम नहीं कर:नियमित अभिव्यक्ति स्वीकृत वर्णों की जाँच करने के जावा

private boolean checkIfAllCharsAreValid(String test) { 
    boolean valid = false; 
    if (test.matches("^[a-zA-Z0-9,.;:-_'\\s]+$")) { 
     valid = true; 
    } 
    return valid; 
} 

लेकिन मैच अवास्तविक लौटाते अगर परीक्षण उस में चरित्र - है। क्या मुझे - से बचना है?

+1

आप भागने की कोशिश क्यों नहीं करते? – Simon

उत्तर

9

[ के अंदर ... ]- प्रतीक विशेष रूप से इलाज किया जाता है। (आप इसे अपने अभिव्यक्ति जहां a-z है की शुरुआत में इस विशेष प्रयोजन में अपने आप का उपयोग करें।)

आप - चरित्र

[a-zA-Z0-9,.;:\-_'\s] 
      ^

बचने या इसे [...] में पिछले (या पहले) लगाने की जरूरत है

[a-zA-Z0-9,.;:_'\s-] 
       ^

की तरह अभिव्यक्ति कुछ आगे नोट:

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

  • String.matches पूर्ण स्ट्रिंग की जांच करता है, इसलिए ^ और $ अनावश्यक हैं।

  • आपके पूरे विधि के रूप में

    return test.matches("[a-zA-Z0-9,.;:_'\\s-]*"); 
    
+0

स्पष्टीकरण के लिए धन्यवाद :) –

+0

कोई समस्या नहीं। आपका स्वागत है। – aioobe

+0

चूंकि हमारे पास चरित्र वर्ग के हिस्से के रूप में 'a-zA-Z0 -9_' है, तो क्या यह चीजों को '\ w'' का उपयोग करने के लिए सरल नहीं करेगा? यानी '\\ w,।;:' \\ s -] * "' – ishnid

1

आप चरित्र समूह के शुरू में - रख सकते हैं इतना है कि यह एक चरित्र रेंज के रूप में व्याख्या नहीं है wirtten जा सकता है।

2

- दोनों तरफ से घिरे एक चरित्र वर्ग में रेंज को दर्शाने के लिए एक रेगेक्स मेटा चरित्र है।

एक वर्ण वर्ग में एक शाब्दिक - सूचीबद्ध करने के लिए आप वर्ण वर्ग में - भागने:

if (test.matches("^[a-zA-Z0-9,.;:\\-_'\\s]+$")) 
           ^^^ 

या वर्ण वर्ग के अंत में - जगह:

if (test.matches("^[a-zA-Z0-9,.;:_'\\s-]+$")) 
            ^

या जगह - चार वर्ग की शुरुआत में:

if (test.matches("^[-a-zA-Z0-9,.;:_'\\s]+$")) 
        ^
संबंधित मुद्दे