आपके लिए दो उत्तर:
पार्सिंग के आधार पर
नियमित अभिव्यक्ति
ध्यान दें कि दोनों मामलों में, मैंने "सकारात्मक पूर्णांक" को शामिल करने के लिए व्याख्या की है 0, भले ही 0सकारात्मक न हो। यदि आप अस्वीकार करना चाहते हैं तो मैं नोट्स शामिल करता हूं 0।
परसिंग के आधार पर
यदि आप चाहते हैं कि यह उचित मानों पर एक सामान्यीकृत दशमलव पूर्णांक स्ट्रिंग हो, तो आप यह कर सकते हैं:
function isNormalInteger(str) {
var n = Math.floor(Number(str));
return n !== Infinity && String(n) === str && n >= 0;
}
या यदि आप व्हाट्सएप और प्रमुख शून्य की अनुमति देना चाहते हैं:
function isNormalInteger(str) {
str = str.trim();
if (!str) {
return false;
}
str = str.replace(/^0+/, "") || "0";
var n = Math.floor(Number(str));
return n !== Infinity && String(n) === str && n >= 0;
}
लाइव परीक्षण (प्रमुख शून्य या व्हाट्सएप को संभालने के बिना):
function isNormalInteger(str) {
var n = Math.floor(Number(str));
return n !== Infinity && String(n) === str && n >= 0;
}
function gid(id) {
return document.getElementById(id);
}
function test(str, expect) {
var result = isNormalInteger(str);
console.log(
str + ": " +
(result ? "Yes" : "No") +
(expect === undefined ? "" : !!expect === !!result ? " <= OK" : " <= ERROR ***")
);
}
gid("btn").addEventListener(
"click",
function() {
test(gid("text").value);
},
false
);
test("1", true);
test("1.23", false);
test("1234567890123", true);
test("1234567890123.1", false);
test("0123", false); // false because we don't handle leading 0s
test(" 123 ", false); // false because we don't handle whitespace
<label>
String:
<input id="text" type="text" value="">
<label>
<input id="btn" type="button" value="Check">
लाइव टेस्टेड ( अग्रणी शून्य और व्हाट्सएप के लिए हैंडलिंग के साथ ):
function isNormalInteger(str) {
str = str.trim();
if (!str) {
return false;
}
str = str.replace(/^0+/, "") || "0";
var n = Math.floor(Number(str));
return String(n) === str && n >= 0;
}
function gid(id) {
return document.getElementById(id);
}
function test(str, expect) {
var result = isNormalInteger(str);
console.log(
str + ": " +
(result ? "Yes" : "No") +
(expect === undefined ? "" : !!expect === !!result ? " <= OK" : " <= ERROR ***")
);
}
gid("btn").addEventListener(
"click",
function() {
test(gid("text").value);
},
false
);
test("1", true);
test("1.23", false);
test("1234567890123", true);
test("1234567890123.1", false);
test("0123", true);
test(" 123 ", true);
<label>
String:
<input id="text" type="text" value="">
<label>
<input id="btn" type="button" value="Check">
यदि आप अस्वीकार करना चाहते हैं 0, तो बस बदल >= 0दें > 0। (या, उस संस्करण में जो अग्रणी शून्य की अनुमति देता है, लाइन || "0"पर हटा दें replace।)
यह कैसे काम करता है:
व्हॉट्सएप और अग्रणी शून्य की अनुमति देने वाले संस्करण में:
str = str.trim(); किसी भी अग्रणी और पीछे आने वाले व्हाइटपेस को हटा देता है।
if (!str) एक रिक्त स्ट्रिंग और रिटर्न पकड़ता है, बाकी काम करने का कोई मतलब नहीं है।
str = str.replace(/^0+/, "") || "0"; स्ट्रिंग से सभी प्रमुख 0 को हटाता है - लेकिन अगर वह रिक्त स्ट्रिंग में परिणाम करता है, तो एक 0 को पुनर्स्थापित करता है।
Number(str): strएक संख्या में परिवर्तित ; संख्या में भिन्नात्मक भाग हो सकता है, या हो सकता है NaN।
Math.floor: संख्या को काटें (किसी भिन्नात्मक भाग को काटें)।
String(...): परिणाम को वापस सामान्य दशमलव स्ट्रिंग में परिवर्तित करता है। वास्तव में बड़ी संख्या के लिए, यह वैज्ञानिक संकेतन पर जाएगा, जो इस दृष्टिकोण को तोड़ सकता है। (मुझे नहीं पता कि विभाजन कहां है, विवरण कल्पना में है , लेकिन पूरे संख्याओं के लिए, मेरा मानना है कि यह उस बिंदु पर है जो आपने 21 अंकों को पार कर लिया है [जिस समय तक संख्या बहुत अधिक हो गई है, जैसा कि IEEE-754 दोहरे सटीक संख्याओं में केवल सटीकता के 15 अंक होते हैं ..)
... === str: मूल स्ट्रिंग की तुलना में।
n >= 0: जांचें कि यह सकारात्मक है।
ध्यान दें कि यह इनपुट के लिए विफल रहता है "+1", वैज्ञानिक संकेतन में कोई भी इनपुट जो String(...)मंच पर एक ही वैज्ञानिक संकेतन में वापस नहीं आता है , और किसी भी मूल्य के लिए जो जावास्क्रिप्ट का उपयोग करता है (IEEE-754 डबल-परिशुद्धता बाइनरी फ्लोटिंग पॉइंट) सही ढंग से यह नहीं दर्शा सकता है कि दिए गए से अलग मूल्य के रूप में कौन सा पर्स (जिसमें 9,007,199,254,740,992 से अधिक पूर्णांक शामिल हैं; उदाहरण के लिए, 1234567890123456789विफल हो जाएगा)। पूर्व एक आसान तय है, बाद के दो इतना नहीं है।
नियमित अभिव्यक्ति
अन्य दृष्टिकोण एक नियमित अभिव्यक्ति के माध्यम से स्ट्रिंग के पात्रों का परीक्षण करना है, यदि आपका लक्ष्य सिर्फ सामान्य दशमलव प्रारूप में या +तो 0एक स्ट्रिंग या उसके बाद एक वैकल्पिक अनुमति देना है (कहें) :
function isNormalInteger(str) {
return /^\+?(0|[1-9]\d*)$/.test(str);
}
लाइव परीक्षण:
function isNormalInteger(str) {
return /^\+?(0|[1-9]\d*)$/.test(str);
}
function gid(id) {
return document.getElementById(id);
}
function test(str, expect) {
var result = isNormalInteger(str);
console.log(
str + ": " +
(result ? "Yes" : "No") +
(expect === undefined ? "" : !!expect === !!result ? " <= OK" : " <= ERROR ***")
);
}
gid("btn").addEventListener(
"click",
function() {
test(gid("text").value);
},
false
);
test("1", true);
test("1.23", false);
test("1234567890123", true);
test("1234567890123.1", false);
test("0123", false); // false because we don't handle leading 0s
test(" 123 ", false); // false because we don't handle whitespace
<label>
String:
<input id="text" type="text" value="">
<label>
<input id="btn" type="button" value="Check">
यह कैसे काम करता है:
^: स्ट्रिंग का मैच शुरू
\+?: एकल, वैकल्पिक की अनुमति दें +(यदि आप नहीं चाहते हैं तो इसे हटा दें)
(?:...|...): इन दो विकल्पों में से एक को अनुमति दें (बिना एक कैप्चर ग्रुप बनाए):
(0|...): 0इसके लिए अनुमति दें ...
(...|[1-9]\d*): ... या 0दशमलव अंकों के किसी भी संख्या के अलावा और उसके बाद शुरू होने वाली संख्या।
$: स्ट्रिंग का मैच अंत।
यदि आप अस्वीकार करना चाहते हैं 0(क्योंकि यह सकारात्मक नहीं है), तो नियमित अभिव्यक्ति बस बन जाती है /^\+?[1-9]\d*$/(उदाहरण के लिए, हम उस विकल्प को खो सकते हैं जिसे हमें अनुमति देने की आवश्यकता थी 0)।
यदि आप अग्रणी शून्य (0123, 00524) की अनुमति देना चाहते हैं, तो बस विकल्प को इसके (?:0|[1-9]\d*)साथ बदलें\d+
function isNormalInteger(str) {
return /^\+?\d+$/.test(str);
}
आप सफेद स्थान को अनुमति देने के लिए चाहते हैं, जोड़ने \s*के तुरंत बाद ^और \s*बस से पहले $।
ध्यान दें कि जब आप इसे एक नंबर में परिवर्तित करते हैं: आधुनिक इंजनों पर इसका उपयोग करना +strया Number(str)करना ठीक होगा, लेकिन पुराने लोग उन्हें गैर-मानक (लेकिन पूर्व-अनुमति प्राप्त) तरीके से विस्तारित कर सकते हैं जो कहते हैं कि एक अग्रणी शून्य का अर्थ है अष्टक (आधार 8), उदाहरण के लिए "010" => 8. एक बार जब आपने संख्या को मान्य कर लिया है, तो आप parseInt(str, 10)यह सुनिश्चित करने के लिए सुरक्षित रूप से उपयोग कर सकते हैं कि यह दशमलव (आधार 10) के रूप में है। parseIntस्ट्रिंग के अंत में कचरे को अनदेखा करेगा, लेकिन हमने सुनिश्चित किया है कि रेगेक्स के साथ कोई भी नहीं है।