2013-01-14 10 views
6

मैं अपने HTML टेक्स्टबॉक्स में % और _ को छोड़कर संख्याओं, अक्षरों और विशेष वर्णों को अनुमति देता हूं। मेरे पास पैटर्न /[[email protected]#$^&*()-+=]/ है। मुझे लगता है कि यह करने का सबसे अच्छा तरीका नहीं है क्योंकि मुझे दो विशेषताओं को छोड़कर सभी विशेष पात्रों को सूचीबद्ध करना है। क्या कोई ऐसा तरीका है जिसमें मुझे सभी विशेष पात्रों को सूचीबद्ध करने की ज़रूरत नहीं है और इसमें दो शामिल नहीं हैं? बीटीडब्ल्यू, जावा जावास्क्रिप्ट regex का उपयोग कर।regex - मैं "%" और "_" को कैसे बाहर निकालूं?

डेमो के लिए देखें http://jsfiddle.net/ce8Th/

कृपया मदद करते हैं।

उत्तर

3

उस जटिल पाश की कोई आवश्यकता नहीं है। बस पूरी स्ट्रिंग पर सीधे replace फोन:

$(this).val(function (i, v) { 
    return v.replace(/%|_/g, ''); 
}); 

यहाँ अपने बेला है: http://jsfiddle.net/ce8Th/1/

+0

धन्यवाद यह वास्तव में काम करता है और मेरा कोड बहुत आसान बना देता है। इसे स्वीकार करने वाला बस कुछ मिनट के लिए wainting। – NinjaBoy

+0

मैं सावधानी बरतता हूं कि यह एक स्वच्छता नहीं है - जो आपके लिए ठीक हो सकता है, लेकिन इसका मतलब है कि अन्य पात्रों को अनुमति दी जाएगी जो आपके साथ ठीक नहीं हो सकते हैं: रिक्त स्थान, टैब, यादृच्छिक अन्य चीजें आपकी मूल सूची में नहीं हैं। – jakerella

+0

@ जेकेरेला - मूल प्रश्न स्वच्छता का उल्लेख नहीं करता है (हालांकि यह उसका इरादा हो सकता है - इस मामले में * कुछ भी * क्लाइंट-साइड बेकार है)। –

2

तुम बस रिवर्स कर सकता है:

/[%_]/ 

if (pattern.test(.... 

यह भी regex का उपयोग नहीं करने के लिए अच्छा है अगर आप डॉन ' टी को नहीं, यह इस मामले में एक बड़ा अंतर बनाता है:

if ("%_".split().indexOf(text.charAt(i)) > -1) { 
+1

मुझे लगता है कि आपका मतलब था '/ [^% _]/'- लेकिन आपको इसके साथ सावधान रहना होगा, इसमें कई अन्य पात्र भी शामिल होंगे ... टैब, नई लाइनें, अन्य भाषा वर्ण, आदि – jakerella

2

एक सफेद सूची हमेशा सर्वोत्तम है। मैं लंबाई संशोधक जोड़ने को छोड़कर तुम्हारे पास क्या है रखने की सलाह देते हैं और आरंभ और समाप्ति पात्रों होगा:

/^[[email protected]#$^&*()-+=]+$/ 
1

मैं अनुमान लगा कि आप LIKE शामिल MySQL क्वेरी के लिए इस उपयोगकर्ता इनपुट का उपयोग कर रहे आंशिक के लिए खोज करने में corrent जा क्या होगा मैचों?

यदि ऐसा है, तो वर्णों को बाहर न करें। इसके बजाय, उन्हें सर्वर-साइड से बचें। उदाहरण के लिए:

$output = str_replace(Array("%","_"),Array("\\%","\\_"),$input); 
+0

या बस 'addslashes ($ इनपुट);'? – jakerella

+0

@ जेकेरेला 'जोड़ों' '_' और'% 'को बचने योग्य नहीं मानता है। –

+0

उह ... यह अच्छा नहीं है। धन्यवाद। – jakerella

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

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