2010-10-15 10 views

उत्तर

3

आप is_numeric() का उपयोग इस चेतावनी के साथ कर सकते हैं कि यह आमतौर पर एक से अधिक से अधिक स्वीकार करता है (उदा। 1e4)।

0

यदि आप नियमित अभिव्यक्तियों के साथ अनुभव नहीं करते हैं तो केवल is_numeric का उपयोग क्यों न करें।

आपके रेगेक्स के रूप में: . सभी वर्णों से मेल खाता है, \. एक डॉट से मेल खाता है। {1} आवश्यक नहीं है। और मुझे कोई संकेत नहीं है कि आप [^ ... ] के साथ क्या करने का प्रयास कर रहे हैं। regular expressions tutorial पढ़ें यदि आप वास्तव में अपने कोड में कहीं भी नियमित अभिव्यक्तियों का उपयोग करना चाहते हैं।

20
/^-?(?:\d+|\d*\.\d+)$/ 

यह सामान्य फ्लोट्स से मेल खाता है उदा। 3.14, केवल दशमलव भाग के लिए shorthands उदाहरण के लिए .5 और पूर्णांक उदा। 9 साथ ही नकारात्मक संख्याएं।

+1

आपको कोष्ठक में परिवर्तन को संलग्न करने की आवश्यकता है, अन्यथा स्टार्ट-ऑफ-स्ट्रिंग एंकर केवल पूर्णांक के साथ लागू किया जाएगा, और अंत-स्ट्रिंग एंकर केवल दशमलव के साथ लागू होगा। –

+0

अच्छा पकड़, तय। –

+0

यह मेरे लिए आईएनटी के लिए भी काम करता है। धन्यवाद। – Strabek

14

यह आपके लिए

$re = "~  #delimiter 
    ^   # start of input 
    -?   # minus, optional 
    [0-9]+  # at least one digit 
    (   # begin group 
     \.  # a dot 
     [0-9]+ # at least one digit 
    )   # end of group 
    ?   # group is optional 
    $   # end of input 
~xD"; 

जो खोज रहे हैं यह केवल स्वीकार करता है "123" या "123.456", नहीं ".123" या "14E + 15" है। यदि आपको इन रूपों की भी आवश्यकता है, तो is_numeric

+6

+1 चरण-दर-चरण टिप्पणी के लिए – alex

+0

डी के लिए क्या है? – AntonioCS

+0

@AntonioCS यह $ [PCRE संशोधक के बारे में रेफरी] (http://php.net/manual/en/reference.pcre.pattern.modifiers.php) 'डी (PCRE_DOLLAR_ENDONLY) यदि यह संशोधक है सीमांकक समाप्त करने के लिए है सेट, केवल स्ट्रिंग स्ट्रिंग के अंत में पैटर्न मिलान में एक डॉलर मेटाएक्टेक्टर। इस संशोधक के बिना, एक डॉलर अंतिम चरित्र से तुरंत मेल खाता है यदि यह एक नई लाइन है (लेकिन किसी भी अन्य न्यूलाइन से पहले नहीं)।यदि संशोधक सेट किया गया है तो यह संशोधक अनदेखा किया जाता है। पर्ल में इस संशोधक के बराबर नहीं है। एफवाईआई: एक्स विस्तारित है: किसी भी व्हाइटस्पेस वर्णों को दबाने के लिए – MediaVince

5

नियमित अभिव्यक्ति मिलान स्ट्रिंग पैटर्न के लिए हैं। आप इनपुट स्ट्रिंग के प्रारूप (लेकिन वास्तविक मूल्य) मान्य के बाद स्पष्ट रूप से नहीं कर रहे हैं, तो आप भी

filter_var("1.33", FILTER_VALIDATE_FLOAT); 

यकीन है कि इनपुट एक नाव मूल्य के रूप में इस्तेमाल किया जा सकता बनाने के लिए उपयोग कर सकते हैं। यह FALSE लौटाएगा यदि यह एक फ्लोट नहीं है और अन्यथा फ्लोट या पूर्णांक मान नहीं है। कोई भी type juggling नियम लागू होते हैं।

+0

यह ओपीएस आवश्यकताओं/विवरण में फिट नहीं है: उदा। यह '123e-4' – salathe

+0

@ सलाथ हां, जैसा कि मैंने कहा था: जब आप * मान * के बाद होते हैं तो इसका उपयोग करें। यदि आप * स्ट्रिंग प्रारूप * को सत्यापित करने के बाद हैं तो इसका उपयोग न करें। '123e-4' अभी भी एक फ्लोट (' 0.123') है। – Gordon

1

इस regex:

\d*(?:\.\d+)? 

परिणाम देगा:

123 -> true 
123.345 -> true 
123. -> true 
.345 -> true 
0.3345 -> true 

हालांकि, अगर आप इसे का उपयोग क्योंकि regex भी शून्य लंबाई इनपुट की अनुमति से पहले इनपुट के खालीपन जांच करना चाहिए।

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