Wie um zu überprüfen, ob eine Zeichenfolge eine Natürliche Zahl?
In javascript, wie kann man überprüfen, ob ein string ist eine Natürliche Zahl (einschließlich null)?
Dank
Beispiele:
'0' //ok
'1' //ok
'-1' //not ok
'-1.1' //not ok
'1.1' //not ok
'abc' //not ok
Sind nicht die natürlichen zahlen, die nur nicht-negative Ganzzahlen? Versuchen
stackoverflow.com/questions/3645544/...
parseInt? Tut es das, Validierung ?
Wikipedia (und einer meiner college-Professoren aus meinen college-Tagen) sagt, dass die natürlichen zahlen kann oder auch nicht
Was
parseInt
? parseInt auf Mozilla Developer Networkstackoverflow.com/questions/3645544/...
parseInt? Tut es das, Validierung ?
Wikipedia (und einer meiner college-Professoren aus meinen college-Tagen) sagt, dass die natürlichen zahlen kann oder auch nicht
0
, und negative zahlen immer ausgeschlossen werden. In OP ' s Fall, die gewünschte definition vermerkt ist, inklusive der 0
(das ist in der Tat "nicht-negative ganze zahlen"). Auch parseInt
allein wird nicht funktionieren, da parseInt('1.1')
zurück 1
(zumindest in Chrome).Was
1.0
? Ist, dass eine Natürliche Zahl durch Ihre definition?InformationsquelleAutor omega | 2013-05-28
Du musst angemeldet sein, um einen Kommentar abzugeben.
Hier ist meine Lösung:
Hier ist die demo:
hier ist die Ausgabe:
DEMO: http://jsfiddle.net/rlemon/zN6j3/1
Hinweis: dies ist keine echte Natürliche Zahl, allerdings habe ich es so verstanden, dass die OP nicht wollen, eine echte Natürliche Zahl. Hier ist die Lösung für real-Natürliche zahlen:
http://jsfiddle.net/KJcKJ/
zur Verfügung gestellt von @BenjaminGruenbaum
Ehrlich gesagt, ich würde es auch nur tun
n>=0 && Math.floor(n) === +n
dies ist, was ich als Natürliche zahlen 🙂 Es ist kurz, und es deckt alle Sonderfälle durch designSie vergaß die
var
Schlüsselwort vorn2
. Ohne, dass du Sie machstn2
global.Blender finden Sie das Komma nach n1 Erklärung. n2 ist nicht global.
Weder kann ich, habe ich aktualisiert meine Antwort entsprechend. Ich denke, die Diskussionen in den Kommentaren haben kann, verwirrt mich ein bisschen auf die Anforderungen. So oder so, der OP kennt die Einschränkung der Funktion und eine alternative hat.
InformationsquelleAutor rlemon
Verwenden regulären Ausdruck
Die Funktion gibt entweder
true
oderfalse
so können Sie überprüfen, die Grundlage.Quelle: http://www.codingforums.com/showthread.php?t=148668
+42
oder5e3
oder0xFF
oder ... lange Geschichte kurz: zahlen sind mehr als text zu analysierenRichtig, und es muss nicht, denn das ist nicht die OP ' s Anforderungen.
Sicher, es tut. Diese Werte erfüllen eine Natürliche Zahl ist. Sie sollten nicht nur code-Beispiele
Ich liefere eine Antwort auf die scheinbaren Bedürfnisse der OP, bin ich nicht verpflichtet, zu befriedigen, nichts weiter. Ich möchte es einfach halten und auf den Punkt. Wenn Sie glauben, meine Antwort nicht ausreicht, dann postet bitte eine Antwort.
Die Antwort basiert auf etwas, das den Bedürfnissen der OP. Der Weg, den Menschen zu zeigen, Sie fühlen sich eine Antwort nicht ausreichend ist mit downvotes, die ich habe laufen der Stimmen für heute. In Ihren eigenen Worten bin ich nicht verpflichtet, zu befriedigen, nichts weiter, wie meine eigene Antwort
InformationsquelleAutor Chris Bier
Wenn Sie ein regex-Phobie, die Sie tun könnten, so etwas wie dieses:
Und einige tests:
Ob
2.0
ist oder ist nicht eine Natürliche Zahl ist eine interessante philosophische Frage 🙂 (Kann eine Nummer sein, genau gleich einer natürlichen Zahl und doch nicht sein eine Natürliche Zahl? Ich bin kein Mathematiker.)Gut, Sie kann beweisen Sie, dass 2, gefolgt von einer unendlichen Zeichenfolge von Nullen nach dem Komma ist die Nummer 2, wie 1, gefolgt von einer unendlichen Zeichenfolge von 9 nach dem Komma ist auch 2.
Ich dachte, als auch, basierend auf den Kommentaren unten tracevipin Antwort, und Wolfram definiert Natürliche zahlen, wie die Menge der positiv (oder nicht negativ) Integer. Da
2.0
ist keine ganze Zahl, es ist technisch nicht eine Natürliche Zahl (trotz gleichwertig zu einer der natürlichen zahlen).Die Dezimalstelle ändert nicht das Objekt, das
1.0
verweist. Von derselben definition, würden Sie argumentieren, dass1.0
und1.00
sind nicht gleich? Eine etwas Verwandte (und wahrscheinlich auch stärker) ist der Beweis zeigt, dass0.999... = 1
, die einen langen Wikipedia-Artikel.InformationsquelleAutor Blender
Können Sie tun
if(num.match(/^\d+$/)){ alert(num) }
InformationsquelleAutor karthikr
Könnten Sie
Den letzten test wird sichergestellt, dass
''
gibtfalse
.Beachten Sie, dass es nicht funktionieren würde mit sehr großen zahlen (wie
1e14
)parseFloat()
undparseInt()
beide akzeptieren Müll am Ende des numerischen Teils einer Zeichenfolge, soparseFloat("12balloons")
zurück12
.OP nicht sagt, was er tun will, mit "12balloons".
Können Sie verwenden: isFinite(e) && Math.abs(Math.Runde(e)) == e
ist das nicht eine Natürliche Zahl, so würde ich davon ausgehen, dass die Funktion zurückkehren würde
false
.Es sollte wohl davon ausgegangen werden, dass
12balloons
ist auch Potenzial, wenn ungültige Eingabe, da die OP gibt'abc'
als "nicht ok" - Beispiel.InformationsquelleAutor Denys Séguret
Können Sie überprüfen, für int mit regexp:
InformationsquelleAutor Goran Lepur
2 == 2.0
, so dass Ihre Funktion zurücktrue
für'2.0'
.Man könnte argumentieren, dass
2.0
gültig sein sollte, weil die Tatsache, dass2 == 2.0
. Hängt davon ab, was der OP will.Absolut, aber zur gleichen Zeit, betrachten Sie meinen Kommentar richtig bevor diese in Richtung Blender. Vielleicht sollte es gültig sein. Aber du hast Recht, es hängt davon ab, wie streng die OP "will" diese werden
Soweit Antworten gehen, ja, es ist definitiv bis zu der OP. Für die mathematischen Definitionen auf, die viel über diese Antworten/Kommentare/Diskussionen sind fundiert, ich bin daran interessiert zu wissen, ob eine Zahl wie
2.0
ist als ein tatsächlicher integer, oder nur gleichwertig, um eine ganze Zahl, die eine "Anzahl separate entity". Ich Stelle mir vor es ist Streit in der mathematischen Welt. Vielleicht eine Frage für math.stackexchange.com.Ganze zahlen sind eine Teilmenge der rationals.
1.0
und1
beziehen sich auf das gleiche Objekt, genauso wie0
und0.0
beziehen sich beide auf0
.InformationsquelleAutor Diode
Anzahl() parst den string input, genau. ("12basdf" NaN", "+42" 42, usw.). Verwenden, um zu überprüfen und sehen, ob es eine Zahl überhaupt. Von dort aus, nur ein paar überprüft, um sicherzustellen, dass die input-erfüllt die restlichen Kriterien erfüllt.
InformationsquelleAutor user2000008
Diese gibt false zurück, für '1-Hund', '-1', " oder '1.1', und gibt true zurück,
für nicht-negative Ganzzahlen oder in die Saiten, darunter '1.2345e12',
und nicht '1.2345e3'.
InformationsquelleAutor kennebec
Konvertieren den string in eine Zahl und dann prüfen:
die Antwort ist schon bearbeitet 🙂
InformationsquelleAutor Pointy
InformationsquelleAutor McNally Paulo
Ich weiß, dieser thread ist ein bisschen alt, aber ich glaube, ich habe gefunden die Genaueste Lösung so weit:
Meine Lösung ist im Grunde eine evolution des Beitrags von @BenjaminGruenbaum.
Sichern, meinen Anspruch auf Richtigkeit habe ich stark erweitert, nach den tests, dass @rlemon gemacht und jeder vorgeschlagene Lösung, einschließlich meiner eigenen, durch Sie:
http://jsfiddle.net/icylace/qY3FS/1/
Wie erwartet einige Lösungen sind genauer als andere, aber meine ist die einzige, die übergibt alle tests.
EDIT: ich aktualisiert
isNat()
weniger abhängig von duck typing und sollten daher noch zuverlässiger.InformationsquelleAutor Ron Martinez
Verwenden
/^\d+$/
entsprechen000
.so verwenden
/^[1-9]\d*$|^0$/
match positive ganze Zahl oder 0 sein Recht.InformationsquelleAutor facebook-100003265043774