2010-08-27 14 views
5

this topic के समान।सी # कुछ प्रतिबंधों के साथ उपयोगकर्ता नाम के लिए Regex

मैं निम्नलिखित प्रतिबंधों के साथ एक उपयोगकर्ता नाम मान्य करने के लिए कोशिश कर रहा हूँ:

  • एक अक्षर या संख्या
  • से प्रारंभ होना चाहिए लंबाई में 3 से 15 अक्षरों
  • चिह्न शामिल होना चाहिए: । - _() []
  • चिह्न नहीं आसन्न हो सकता है लेकिन अक्षरों और संख्याओं कर सकते हैं

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

  • अक्षर और संख्याएं AZ 0-9 az

गया हैं थोड़ी देर के लिए stumped। मैं regex करने के लिए नया हूँ।

+0

जब आप कहते हैं कि "प्रतीक लगातार दिखाई नहीं दे सकते हैं," तो क्या आपका मतलब है।-_() [] ', या क्या आपका मतलब है कि 'ए-ज़ा-जे 0-9' को दोहराने की अनुमति नहीं है? –

+1

लोग अपनी डबल-हॉकी-स्टिक्स के बिना क्या करेंगे? ('] [') –

+2

जब आप "अक्षर" या "संख्या" कहते हैं तो क्या आपका मतलब ए-जेड और 0-9 है, या विदेशी अक्षरों और संख्याओं को भी अनुमति दी जानी चाहिए? उदाहरण के लिए, एक चीनी व्यक्ति इसे वैध संख्या के रूप में मानता है: 九 –

उत्तर

11

यह इतना एक भी नियमित अभिव्यक्ति में असंबंधित नियमों का एक सेट व्यक्त करने के लिए साफ नहीं है, लेकिन यह lookaround दावे (Rubular) का उपयोग करके किया जा सकता है:

@"^(?=[A-Za-z0-9])(?!.*[._()\[\]-]{2})[A-Za-z0-9._()\[\]-]{3,15}$" 

स्पष्टीकरण:

 
(?=[A-Za-z0-9])   Must start with a letter or number 
(?!.*[._()\[\]-]{2})  Cannot contain two consecutive symbols 
[A-Za-z0-9._()\[\]-]{3,15} Must consist of between 3 to 15 allowed characters 

आप शायद यह विचार करना चाहें कि सरल पढ़ने वाले अभिव्यक्तियों की सूची के रूप में पढ़ने और अधिक रखरखाव करना आसान होगा, जिनमें से सभी को सफलतापूर्वक सत्यापित करना होगा, या फिर इसे सामान्य सी # कोड में लिखें।

+0

लम्बाई जांच के लिए रेगेक्स का उपयोग अक्षम, अस्पष्ट, और टूटने के अधीन है। (मुझे लगता है कि मार्क का कोड टूटा हुआ है, ऐसा लगता है कि इसके लिए एक अक्षर या संख्या की आवश्यकता होती है जिसके बाद 3-15 अधिक वर्ण होते हैं, इसलिए यह वास्तव में 4-16 वर्णों से मेल खाता है।) प्रत्येक आवश्यकता के लिए एक अलग परीक्षण का उपयोग करना समझना बहुत आसान होगा और बनाए रखें। –

+0

त्वरित उत्तर के लिए धन्यवाद। यह भी काम करता था, लेकिन अवधि (?! * * _() \ [\] - \ {2}) भाग से गुम है। होना चाहिए (?!। * [._() \ [\] -] {2}) अन्यथा कोई अवधि किसी भी प्रतीक का पालन कर सकती है – Marlon

+2

@ बेन: अस्पष्ट, हाँ, लेकिन मार्क का कोड शून्य चौड़ाई वाला दावा करता है (यह खपत करता है कोई पात्र नहीं), इसलिए लंबाई की बाधा संरक्षित है। –

14

मार्क जवाब देने के लिए एक अनुकूलन के रूप में:

^(?=.{3,15}$)([A-Za-z0-9][._()\[\]-]?)*$ 

स्पष्टीकरण:

(?=.{3,15}$)     Must be 3-15 characters in the string 
([A-Za-z0-9][._()\[\]-]?)* The string is a sequence of alphanumerics, 
           each of which may be followed by a symbol 

यह एक परमिट यूनिकोड अक्षर या अंक:

^(?=.{3,15}$)((\p{L}|\p{N})[._()\[\]-]?)*$ 

यह एक यूनिकोड संस्करण है, के साथ साथ गैर का उपयोग करता है -कैप्चरिंग समूह:

^(?=.{3,15}$)(?:(?:\p{L}|\p{N})[._()\[\]-]?)*$ 
+0

+1 यह काफी उपयोगी भिन्नता है क्योंकि यह" अक्षर या संख्या "और" प्रतीक "की परिभाषाओं को दोहराने से बचाता है। आपको सबसे निचले कोष्ठक की आवश्यकता नहीं है। –

+0

आप सही हैं, वह एक संश्लेषित परमाणु था। अनावश्यक माता-पिता हटा दिए गए। –

+0

यह भी तेज होना चाहिए, क्योंकि केवल एक लुकहेड है, और यह बहुत आसान है। –

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