2012-04-25 6 views
5

मैं अभी भी रेगेक्स के लिए बहुत नया हूं और मूल रूप से मुझे जो करना है वह एक नियम बना रहा है जो संख्याओं और अक्षरों को स्वीकार करता है लेकिन लगातार वर्णों को दर्ज करने की अनुमति नहीं है।रेगेक्स अस्वीकार्य अक्षरों को अस्वीकार करें

उदाहरण के लिए: ABCD -> ठीक है, abbcd -> बुरा

मैं काम करने के लिए इसमें से अधिकांश है, लेकिन भाग मैं नहीं कर सकते यह पता लगाने ठीक है कि कैसे मैं लगातार पात्रों को प्रतिबंधित करते हैं?

मेरे कोड अब तक:

/^[A-Za-z-0-9]{8,15}$/i 
+0

पहले तो मुझे लगता है कि जेड और 0 के बीच ऋण चिह्न को रेखांकित कर रहा है और यदि वह ऐसा है आप बेहतर रूप से '[ए-ज़ा-जेएपी-9] ' – shift66

उत्तर

4
>>> r = /^((\w)(?!\2))+$/i 
>>> r.exec('abbcd') 
null 
>>> r.exec('abcd') 
[ 'abcd', 
    'd', 
    'd', 
    index: 0, 
    input: 'abcd' ] 

\2 हिस्सा एक वापस संदर्भ और मैचों जो भी चरित्र अंतिम बार समूह (\w) के अनुरूप है। तो ऋणात्मक लुकहेड (?!\2) का मतलब है "चरित्र के बाद नहीं।" अगर यहां इस्तेमाल किए गए कुछ शब्द आपसे अपरिचित हैं, तो आपको उन्हें MDN's Regular Expression Documentation पर देखना चाहिए।

8-15 वर्णों के लिए स्वीकार किए जाते हैं तार की लंबाई सीमित करने के लिए ओ पी के रूप में, बदल +{8,15} रहे हैं:

>>> r = /^((\w)(?!\2)){8,15}$/i 
>>> r.exec('abcd') 
null 
>>> r.exec('abcdabcd') 
[ 'abcdabcd', 
    'd', 
    'd', 
    index: 0, 
    input: 'abcdabcd' ] 
+0

की बजाय' [\ w]' का उपयोग करते हैं, इस उत्तर की बात यह है कि यह मेरा सीमा नियम हटा देता है, जिसे उपयोगकर्ता को न्यूनतम 8 वर्ण इनपुट करना चाहिए लेकिन अब और नहीं 16. से अधिक – shade917

+0

@ छाया 9 17: आप इसे प्राप्त करने के लिए '+ 'चिह्न' {8,15}' (आपके प्रश्न से) में बदल सकते हैं। –

+0

हे बहुत बहुत धन्यवाद दोस्तों, यह मेरे लिए पूरी तरह से काम करता है! – shade917

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