2017-01-19 3 views
0

Ein Benutzer kann in ein Textfeld entweder einzelne Seriennummern eingeben, z. B. 1,2,3,4,5, oder QR-Codes scannen, die in ein Format von [460, 3], [123,321], [900,123].So prüfen Sie, ob ein Feld eine Zahlenfolge oder ein Array enthält

Was ich tun muss, ist das Feld zu überprüfen, ob ein QR-Code gescannt wird oder ob ein Benutzer in einzelnen Zahlen eingegeben. Angenommen, es ist entweder das eine oder das andere Format - es kann nicht beides sein.

Zur Zeit habe ich dies als Filter:

if(serialnumbers[0] != '['({ 
    //code for individual numbers 
} 
else{ //code for qr code arrays 
} 

Grundsätzlich Ich prüfe nur, wenn der Textbox Wert mit einer Konsole startet, wenn ich eine Liste von Zahlen oder eine Liste von Arrays, um zu sehen, aber ich frage mich, ob es einen besseren Weg, dies

+0

Could Szenario, in dem typeof verwendet werden soll. –

Antwort

0

Sie können dies mit einem einzigen regulären Ausdruck tun.

ich einen relevanten RegEx gebucht haben für Sie von hier aus erkunden und lernen: http://regexr.com/3f4au

in Code gebraucht, dies wäre:

var individualCheck = /^(\d+)$|^((\d+,)+(\d+))$/; 
var qrCheck = /^\[(\d+\,\d+)\]((\,\s*\[(\d+\,\d+)\])*)$/; 

if (serialnumbers.match(individualCheck)){ 
    console.log("Individual Numbers Style"); 
    // code for individual numbers 
} else if (serialnumbers.match(qrCheck)) { 
    console.log("QR Codes Style"); 
    //code for qr code arrays 
} else { 
    console.log("Validation failed"); 
    //code for invalid input 
} 

Oder eine JSFiddle für Sie: https://jsfiddle.net/kitkit/5Lxmz6dy/2/

+0

danke für die Demo. Es funktioniert, wenn nur ein QR-Code gescannt wird, aber wenn mehrere gescannt werden, wird es nicht funktionieren –

+0

Entschuldigung Chris - Ich habe ursprünglich nicht erkannt, dass Sie auch eine unbegrenzte Liste von QR-Codes zulassen möchten. Ich habe meine Antwort aktualisiert, um dies mit einer erweiterten QRCode-Prüfung zu ermöglichen, und auch die Links RegExr und JSFiddle aktualisiert. – Kit

0

Sie es mit diesem Regex tun könnten, die mehr straigtforward ist, als es aussieht zuerst, da es nur ein Wechsel ist:

/^((\d+(,\s*|$))+|(\[\d+,\s*\d+\](,\s*|$))+)$/.test(input) 

Zusammenbruch in Englisch:

-von Beginn der Zeichenfolge ^, verbrauchen:

- (erster Teil des Haupt Wechsel |) Komma Liste der Anzahl getrennt(\d+(,\s*|$))+

- OR (zweiter Teil des Wechselns) Komma Liste der [Nummer, Nummer] getrennt(\[\d+,\s*\d+\](,\s*|$))+

-followed sofort von Ende der Eingabe $.

https://regex101.com/r/Sr1zES/3

1

nicht sicher, warum Sie nicht in der Lage sein typeof zu verwenden. Diese ist, was ich hier tun:

if(typeof serialnumbers != 'string'){ 
    //code for qr code arrays 
} 
else{ 
    //code for individual numbers 
} 

Mein Fiddle geht mehr in die Tiefe, check it out! https://jsfiddle.net/zkqd1bre/3/

+0

Das Feld ist ein Textfeld, daher ist es immer ein String.Ich habe bereits eine Möglichkeit, die Zeichenkette in ein Array von Zahlen oder ein Array von Arrays zu konvertieren, aber ich finde keinen besseren Weg, um zu überprüfen, ob es sich dabei um eine Reihe von Zahlen oder eine Reihe von Arrays handelt. –

Verwandte Themen