2012-08-23 13 views
6

मैं एक टेक्स्टरेरा को सत्यापित करना चाहता हूं और मुझे बस रेगेक्स नहीं मिला (यह मुझे दिन और ट्यूटोरियल का एक गुच्छा इसे समझने के लिए लिया गया)।रेगेक्स: कुछ चयनित वर्णों के अलावा सबकुछ अनुमति दें

असल में मैं सब कुछ (लाइन ब्रेक और रथ शामिल) की अनुमति देने में सक्षम होना चाहता हूं, लेकिन वे वर्ण जो दुर्भावनापूर्ण हो सकते हैं (जो सुरक्षा उल्लंघन का कारण बनेंगे)। चूंकि बहुत कम वर्ण हैं जिनकी अनुमति नहीं है, मुझे लगता है कि यह एक सफेद की तुलना में एक काला सूची बनाने के लिए और अधिक समझ में आता है।

मेरा प्रश्न है: रेगेक्स में मानक "सबकुछ लेकिन" क्या है?

मैं जावास्क्रिप्ट और jquery का उपयोग कर रहा हूँ।

मैं इस कोशिश की, लेकिन यह काम नहीं करता है (यह भयंकर है, मुझे पता है ..):

var messageReg = /^[a-zA-Z0-9éèêëùüàâöïç\"\/\%\(\).'?!,@$#§-_ \n\r]+$/; 

धन्यवाद।

+1

क्या आप इसे मतलब है काम नहीं करता है के लिए हेक्स कोड के साथ \x उपयोग करने के लिए है? उस रेगेक्स का उपयोग करने वाला कोड क्या है? –

+4

यह सुरक्षा के लिए कुछ भी नहीं करेगा। एक फॉर्म जावास्क्रिप्ट के बिना और ब्राउज़र का उपयोग किए बिना भी सबमिट किया जा सकता है (क्योंकि यह केवल एक निश्चित प्रकार का HTTP अनुरोध है)। – Esailija

+1

RegEx वास्तव में सुरक्षा उल्लंघनों से सुरक्षित होने का सही तरीका नहीं है। यह [धागा] (http://stackoverflow.com/questions/24723/best-regex-to-catch-xss-cross-site-scripting-attack-in-java) रुचि का हो सकता है। एक्सएसएस के खिलाफ रक्षा regex के साथ नहीं किया जाता है। – sQVe

उत्तर

1

जैसा कि एस्सेलिया ने उल्लेख किया है, यह वास्तविक सुरक्षा के लिए कुछ भी नहीं करेगा।

आपके द्वारा उल्लिखित कोड लगभग एक नकारात्मक सेट है, क्योंकि murgatroid99 का उल्लेख है, ^ ब्रैकेट के अंदर जाता है। तो नियमित अभिव्यक्ति उस सूची से मेल खाने वाली किसी भी चीज़ से मेल खाती है। लेकिन ऐसा लगता है कि आप वास्तव में उन पात्रों को तोड़ना चाहते हैं, इसलिए आपके regexp को अस्वीकार करने की आवश्यकता नहीं है।

आपका कोड देखो की तरह करना चाहिए:

str.replace(/[a-zA-Z0-9éèêëùüàâöïç\"\/\%\(\).'?!,@$#-_ \n\r]/g, ""); 

का कहना है कि, मेरे नियमित अभिव्यक्ति के सभी पात्रों को हटा दें।

हालांकि, यह कह रहा है कि आप a-zA-Z0-9 रखना नहीं चाहते हैं क्या आप वाकई उन्हें बाहर करना चाहते हैं?

इसके अलावा, क्रोम में रेगुलर एक्सप्रेशन § पसंद नहीं है, तो आप चरित्र

+0

असल में, मैं उन पात्रों को अनुमति देना चाहता था (यह एक बड़ा सेट है लेकिन यह बाद में कुछ वजन कम करने के लिए था)। विवरण के लिए आपका धन्यवाद – Baylock

15

यह किसी भी चरित्र से मेल खाता है तो आप (कुछ विराम चिह्न वर्ण उदाहरण के लिए) वर्णों की एक सेट को हटा आप की तरह

/[^.?!]/ 

एक वर्ण सेट की शुरुआत में ^ ऑपरेटर का प्रयोग करेंगे एक regex में, चाहते हैं यह ., ?, या ! नहीं है।

+0

आपके उत्तर के लिए धन्यवाद – Baylock

+2

स्टैक ओवरफ़्लो पर हम आम तौर पर पसंद करते हैं कि आप टिप्पणियों के बजाय वोट का उपयोग करें ताकि यह कह सकें कि एक प्रश्न उपयोगी है क्योंकि इस तरह की टिप्पणियां आम तौर पर शोर मानी जाती हैं और वोट दूसरों के लिए अधिक उपयोगी होते हैं। – murgatroid99

+0

हाँ, कारण मैं ऐसा करता हूं कि मुझे नहीं पता कि यहां वोट कैसे दिया जाए। मेरे पास एक हरा झंडा देखने की क्षमता है। लेकिन केवल एक ध्वज की अनुमति है और बहुत अच्छे जवाब हैं। मैं इस बात को समझने की कोशिश कर रहा हूं लेकिन अभी भी कोई सुराग नहीं है। – Baylock

6

आप कोष्ठक [] अंदर पहले अक्षर के रूप में ^ उपयोग कर सकते हैं क्या क्या है नकारना करने के लिए:

/^[^abc]*$/ 

इसका मतलब यह है: "। शुरू से आखिर, कोई a, b, या c करने के लिए"

+0

धन्यवाद नहीं कर सकते! – Baylock

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