zeichen - javascript string zerlegen




Regex, um zu prüfen, ob eine Zeichenfolge nur Zahlen enthält (12)

hash = window.location.hash.substr(1);
var reg = new RegExp('^[0-9]$');
console.log(reg.test(hash));

Ich werde sowohl bei "123" als auch "123f" falsch. Ich würde gerne überprüfen, ob der Hash nur Zahlen enthält. Habe ich etwas verpasst?


Benutze das:

const pattern = new RegExp(/^[+-]?\d+(\.\d+)?([Ee][+-]?\d+)?$/g);

Das ist extremer Overkill für deinen Zweck, aber hier ist, was ich benutze:

var numberReSnippet = "(?:NaN|-?(?:(?:\\d+|\\d*\\.\\d+)(?:[E|e][+|-]?\\d+)?|Infinity))";
var matchOnlyNumberRe = new RegExp("^("+ numberReSnippet + ")$");

Nach meinem Wissen entspricht dies allen Variationen von Zahlen, die Ihnen Java und JavaScript jemals liefern werden, einschließlich "-Infinity", "1e-24" und "NaN". Es stimmt auch mit Zahlen überein, die Sie eingeben könnten, wie beispielsweise "-.5".

Wie geschrieben, ist reSnippet so konzipiert, dass es in andere reguläre Ausdrücke eingefügt wird, sodass Sie Zahlen extrahieren (oder vermeiden) können. Trotz aller Klammern enthält es keine einfangenden Gruppen. Daher stimmt "matchOnlyNumberRe" nur mit Zeichenfolgen überein, die Zahlen sind, und hat eine Erfassungsgruppe für die gesamte Zeichenfolge.

Hier sind die Jasmine-Tests, damit Sie sehen können, was es tut und was nicht:

describe("Number Regex", function() {
    var re = new RegExp("^("+ numberReSnippet + ")$");
    it("Matches Java and JavaScript numbers", function() {
        expect(re.test(         "1")).toBe(true);
        expect(re.test(       "0.2")).toBe(true);
        expect(re.test(     "0.4E4")).toBe(true);  // Java-style
        expect(re.test(       "-55")).toBe(true);
        expect(re.test(      "-0.6")).toBe(true);
        expect(re.test(  "-0.77E77")).toBe(true);
        expect(re.test(      "88E8")).toBe(true);
        expect(re.test(       "NaN")).toBe(true);
        expect(re.test(  "Infinity")).toBe(true);
        expect(re.test( "-Infinity")).toBe(true);
        expect(re.test(     "1e+24")).toBe(true);  // JavaScript-style
    });
    it("Matches fractions with a leading decimal point", function() {
        expect(re.test(        ".3")).toBe(true);
        expect(re.test(       "-.3")).toBe(true);
        expect(re.test(     ".3e-4")).toBe(true);
    });
    it("Doesn't match non-numbers", function() {
        expect(re.test(         ".")).toBe(false);
        expect(re.test(        "9.")).toBe(false);
        expect(re.test(          "")).toBe(false);
        expect(re.test(         "E")).toBe(false);
        expect(re.test(       "e24")).toBe(false);
        expect(re.test(   "1e+24.5")).toBe(false);
        expect(re.test("-.Infinity")).toBe(false);
    });
});

Dieser wird auch für signierte und float Zahlen oder leere Zeichenfolgen erlauben:

var reg = /^-?\d*\.?\d*$/

Wenn Sie nicht zulassen möchten, dass die Zeichenfolge leer ist, verwenden Sie diese:

var reg = /^-?\d+\.?\d*$/

Du brauchst das * also sagt es "null oder mehr des vorherigen Charakters" und das sollte es tun:

var reg = new RegExp('^\\d*$');

Nummer nur Regex ( aktualisiert )

 var reg = new RegExp('[^0-9]','g');

Warum nicht etwas verwenden wie:

$.isNumeric($(input).val())

Wird jquery getestet und der häufigste Fall wird überprüft


Wenn Sie die Zahlen mit vorzeichenbehafteten Werten abgleichen möchten, können Sie Folgendes verwenden:

var reg = new RegExp('^(\-?|\+?)\d*$');

Es wird die Zahlen des Formats validieren: +1, -1, 1.


Wenn Sie nur positive ganze Zahlen benötigen und keine führenden Nullen benötigen (zB "0001234" oder "00"):

var reg = /^(?:[1-9]\d*|\d)$/;

Wie Sie sagten, möchten Sie Hash nur Zahlen enthalten.

var reg = new RegExp('^[0-9]+$');

oder

var reg = new RegExp('^\\d+$');

\d und [0-9] bedeuten beide dasselbe. Das verwendete + bedeutet, dass nach einem oder mehreren Vorkommen von [0-9] gesucht wird.


/^[\+\-]?\d*\.?\d+(?:[Ee][\+\-]?\d+)?$/

var pattern = /[0-9!"£$%^&*()_+-=]/;

Dies versucht einige Szenarien zu vermeiden, nur für den Fall:

Wenn Sie alle Puffer überschreiben, wird möglicherweise die ursprüngliche Zeichenfolge übergeben. Langsamkeit oder Kuriositäten, verursacht durch denormale Zahlen wie 1E-323 . Infinity übergeben, wenn eine endliche Zahl erwartet wird (versuchen Sie 1E309 oder -1E309 ).


var reg = /^\d+$/;

Sollte es tun. Das Original entspricht allem, was aus genau einer Ziffer besteht.





regex