2009-02-06 29 views
9

नहीं हो सकता है, मुझे किसी फ़ॉर्म पर इनपुट सत्यापित करने की आवश्यकता है। मैं इनपुट को 1 से 1 9 अंकों के बीच एक संख्या होने की उम्मीद कर रहा हूं। इनपुट शून्य से भी शुरू हो सकता है। हालांकि, मैं यह सत्यापित करना चाहता हूं कि वे सभी शून्य नहीं हैं। मुझे एक रेगेक्स मिला है जो सुनिश्चित करेगा कि इनपुट संख्यात्मक है और 1 और 1 9 संख्याओं के बीच है।संख्याओं की परिवर्तनीय लंबाई स्ट्रिंग से मेल खाने के लिए एक रेगेक्स की आवश्यकता है जो सभी शून्य

^\d[1,19]$ 

लेकिन मुझे यह पता नहीं लगाया जा सकता है कि संपूर्ण स्ट्रिंग सभी शून्य नहीं है। मैं इस

^(![0]{1,19})(\d[1,19])$ 

कोशिश की, लेकिन क्योंकि यह शून्य के परिवर्तनशील की इजाजत दी है यह 0000000000000000001 पर विफल रहता है।

मैं कैसे जांचूं कि पूरी स्ट्रिंग शून्य नहीं है?

धन्यवाद।

मैं इसे एएसपी.NET RegularExpressionValidator में करने की कोशिश कर रहा हूं इसलिए मैं एक अभिव्यक्ति की उम्मीद कर रहा था। मेरे पास अन्य विकल्प हैं, इसलिए यदि यह नहीं किया जा सकता है तो मैं भाग्य से बाहर नहीं हूं।

(?!^0+$)(^\d{1,19}) 

यह पर्ल में ठीक काम करता है:

उत्तर

18

^(?!0+$)\d{1,19}$

+0

मैंने पहले यह कोशिश की और यह मेरे द्वारा दिए गए उदाहरण के लिए काम नहीं करता है। यकीन नहीं था कि क्या? हालांकि किया – Notorious2tall

+0

दूसरे संस्करण मेरे परीक्षण मामलों के लिए काम करता है। – chaos

+0

अच्छा, यह काम करता है! क्या आप (?! 0 + $) भाग समझा सकते हैं? – Notorious2tall

2

बस एक नकारात्मक अग्रदर्शी है।

+0

आपको^"कारक" करना चाहिए और इसे बहुत शुरुआत में रखना चाहिए; आपका तरीका काम करेगा, लेकिन इस तरह से इरादे को और स्पष्ट रूप से व्यक्त किया जाएगा। और आपको एक जोड़ना होगा अंत में $ इसलिए यह अंक के बाद किसी और चीज से मेल नहीं खा सकता है। –

0

आपको लगता है कि

  ulong test; 
     string number = "123456789"; 
     if (ulong.TryParse(number, out test) && (test < 9999999999999999999ul) && (test > 0)) 
      Console.WriteLine(test); 
+1

मुझे यकीन है कि वह जानता है कि उसे सामान्य मामले के रूप में तर्क कैसे बनाया जाए। वह जो करने की कोशिश कर रहा है उसे आरई के रूप में पैकेज करना है, और हम कर सकते हैं मान लें कि उसके पास ऐसा करने के कारण हैं। – chaos

+0

हां, यह सही है।मैं इसे सर्वर की ओर से मान्य कर सकता हूं लेकिन इसे RegExValidator के साथ करना चाहता था। आंशिक बी/सी मैं एक पोस्ट वापस नहीं करना चाहता हूं और आंशिक रूप से बी/सी मैं रेगेक्स सीखना चाहता हूं। मूल रूप से व्यावहारिक और स्वार्थी कारणों से। :) – Notorious2tall

+0

मैं आपके प्लेटफ़ॉर्म से परिचित नहीं हूं, लेकिन यदि आपके RegExValidator के डिज़ाइनर वास्तविक स्मार्ट थे, तो उन्होंने इसे बनाया होगा ताकि आप इसे सर्वर-साइड पर चला सकें और इसे क्लाइंट-साइड स्क्रिप्ट के रूप में प्रस्तुत कर सकें, जो कि है अत्यधिक इष्टतम (आपको क्लाइंट पक्ष पर भी इसकी आवश्यकता है, लेकिन किसी क्लाइंट पर कभी भरोसा न करें)। – chaos

2

(?! 0 + $) के लिए रेगुलर एक्सप्रेशन से की जरूरत नहीं है एक अग्रदर्शी निर्देश है। द? स्ट्रिंग के अंत में 1 या अधिक 0 के लिए खोज करने के लिए ऋणात्मक लुकहेड कमांड है। यदि वह मेल खाता है, तो अक्षरों का उपभोग किया जाता है, जिससे \ n {1,19} की नियमित अंक खोज छोड़ दी जाती है।

Boost Perl Regexp बूस्ट द्वारा मान्यता प्राप्त perl regexp की अच्छी चर्चा है।