2010-11-05 11 views
42

जेएसलिंट रिपोर्ट निम्न पंक्ति के लिए असुरक्षित '^' रिपोर्ट करता है। ऐसा क्यों है? या क्या यह किसी भी समय शिकायत करने जा रहा है कि मैं एक चरित्र वर्ग को अस्वीकार करना चाहता हूं?नियमित अभिव्यक्ति में JSLint "असुरक्षित ^"

// remove all non alphanumeric, comma and dash characters 
"!$7s-gd,&j5d-a#".replace(/[^\w,\-]/g, ''); 
+1

उपयोग करना चाहते हैं कॉन्फ़िगर कर सकते हैं की अनुमति देगा: p संभवत मजाकिया [यूनिकोड] नियंत्रण पात्रों सहित अस्वीकृति को "बहुत अधिक स्वीकार करने" के रूप में देखा जा सकता है (यह केवल रेगेक्स पर अनुमान लगा सकता है, यह इसे अर्थात् नहीं जानता है)। –

+1

एफडब्ल्यूआईडब्ल्यू, आपको बचने की जरूरत नहीं है - जहां आपके पास है। – Robusto

+1

@ रोबस्टो, चरित्र वर्गों में स्पष्ट रूप से हाइफ़न से बचने वाला एक और जेएसलिंट अनुशंसा है। –

उत्तर

38

यदि आप विकल्प निचले भाग में चयनित है यह केवल यह कर देगा:

Disallow insecure . and [^...] in /RegExp/ 

the docs से:

अगर सही है। और [^ ...] RegExp अक्षर में अनुमति नहीं दी जानी चाहिए। सुरक्षित अनुप्रयोगों में सत्यापन करते समय इन रूपों का उपयोग नहीं किया जाना चाहिए।

तो जवाब आपके सवाल का, अगर आप ^ साथ एक regex शुरू करने और यह जाँच कर रहा है, हाँ यह त्रुटि हर बार फेंक देंगे। मुद्दा यूनिकोड वर्णों के साथ है, आप वहां बहुत कुछ भी अनुमति दे रहे हैं और सुरक्षा समस्याओं के लिए संभावित है, या मुद्दों को छोड़कर सत्यापन। को अस्वीकार करने के बजाय कुछ (जिसे बाईपास किया जा सकता है), केवल वर्ण क्या मान्य हैं।

+3

ब्लेरघ, जेएसलिंट यह देखने के लिए पर्याप्त स्मार्ट नहीं है कि मैं सबकुछ बदल रहा हूं * लेकिन * उन चीजें? string.match (/ [\ w, \ -]/g, '')। join ('') यह तब है। –

+15

@ टॉम जेएसलिंट * परवाह नहीं करता * आप जो कर रहे हैं वह नौसिखिया जावास्क्रिप्टर को मूर्ख गलतियों से बचाने के लिए सिफारिशों और सर्वोत्तम प्रथाओं की पेशकश करता है। यदि आप सभी तरीकों से जो कर रहे हैं उसे औचित्य दे सकते हैं, तो ऐसा करें, लेकिन शिकायत न करें कि JSList इसे पसंद नहीं करता है। – xj9

+18

जेएसलिंट की अत्यधिक कठोरता के बारे में शिकायत दुनिया भर में उपभोक्ता पेशेवरों का एक शगल है। – ErikE

0

\W के बजाय /^\w/

"!$7s-gd,&j5d-a#".replace(/\W/g, ''); 

का उपयोग कर अपने विशेष मामले के लिए यह इसलिए है क्योंकि आप अल्पविराम और पानी का छींटा पात्रों छोड़ना चाहते हैं काम नहीं होगा पर विचार करें, लेकिन मुझे लगता है कि उल्लेख के लायक है।

6

regexp: true

अपने फाहा विकल्पों में

,

. and [^...] in /RegExp/

आप नियमों क्योंकि यह JSLint है तुम यहाँ

http://www.jslint.com/

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