2009-10-13 15 views
39

मुझे इस कथन पर "खराब संकलन निरंतर मूल्य" मिलता है।खराब संकलन निरंतर मान

Regex objCheckNumber = new Regex("^(\d){4}$"); 

मैं बस यह देखने के लिए एक और स्ट्रिंग जांचने के लिए इसे सेट करना चाहता हूं कि यह मान 4 अंक है या नहीं।

उत्तर

70

सी # पलायन अनुक्रम के रूप में \d व्याख्या करने के लिए कोशिश कर रहा है, और \dनहीं एक वैध एस्केप अनुक्रम (लेकिन \n और \t है , उदाहरण के लिए)। आप इसे से बचने के लिए बैकस्लैश को दोगुना कर सकते हैं ("^(\\d){4}$"), या आप निरंतर स्ट्रिंग को एट-साइन के साथ उपसर्ग कर सकते हैं: @"^(\d){4}$"

+1

-1: \ d = सी #/एनईटी रेगेक्स –

+0

धन्यवाद में एकल संख्यात्मक अंक, पूरी तरह से इसे अनदेखा कर दिया क्योंकि मैं इसके बारे में बहुत कुछ सोच रहा था regex और यह एक स्ट्रिंग duh है। – PositiveGuy

+0

वूप्स, psasiks टिप्पणी करने का मतलब नहीं था। – PositiveGuy

8

सी # एक बच निकलने वाले चरित्र के रूप में उपयोग करता है। आपको \ से \\ को डबल करने की आवश्यकता है।

वैकल्पिक रूप से, दोहरे-उद्धरण से पहले एक @ चरित्र जगह:

new Regex(@"^(\d){4}$") 
+0

\ डी से बच निकलता है जिसका मतलब एकल संख्यात्मक चरित्र है। {4} के साथ वह चार पंक्तियों की तलाश में है। –

+2

@pasasik - हाँ, \ d का रेगेक्स इंजन के लिए विशेष अर्थ है, लेकिन आपको उस स्ट्रिंग को पहले रेगेक्स इंजन में प्राप्त करना होगा। इसे दोगुना करने या @ का उपयोग करने के बिना, सी # कंपाइलर सोचता है कि आप 'विशेष' चरित्र (जैसे \ t या \ n) के रूप में \ d को समझते हैं और इसे संभालने के लिए कोशिश करता है (और विफल रहता है)। –

+0

मैं रेगेक्सहेरो में परीक्षण कर रहा हूं: http://regexhero.net/tester/ और ... jeesh। मैं अपनी गलती देखता हूं। (डाउनवोट बाइनरीकोडर के बारे में खेद है, तो मुझे इसे उलटने नहीं देगा ...) –

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