2016-06-29 3 views
0

Ich möchte überprüfen, dass zwei meiner Felder Preis und Menge einen Eingangswert mit einer Art von Nummer erhalten, bevor ich das Formular absende, so in meiner Validierungsfunktion schreibe ich Mit dem folgenden Code:Bei der Verwendung von Redux-Form verstehe ich nicht, warum der Wert meiner Eingabe immer als String zurückgegeben wird. Ich möchte zwei Felder nur Zahlen sein

function validate(values) { 
    const errors = {}; 

    _.map(FIELDS, (config, field) => { 
     if (!values[field]) { 
      errors[field] = `Please Enter ${config.label}`; 
     } 
     if (typeof values['price'] !== 'number') { 
      errors['price'] = 'Please enter a number'; 
     } 
     if (typeof values['quantity'] !== 'number') { 
      errors['quantity'] = 'Please enter a number'; 
     } 
    }); 

    return errors; 
} 

der Fehler ‚Bitte geben sie eine Nummer‘ auf meiner Form, unabhängig davon gezeigt, ob ich eine Nummer oder nicht, geben, damit ich Konsole den typeof Eingabewert für Preis und Menge angemeldet und es stellt sich heraus, Sie sind immer Strings. Wie soll ich das Formular validieren, damit ich prüfen kann, ob Preis und Menge eine Nummer erhalten?

Antwort

1

Daten werden immer aus Eingabefeldern als Strings zu Ihnen kommen. Stattdessen könnten Sie einen regulären Ausdruck verwenden, um zu sehen, dass es nur Container-Nummern statt

typeof values['quantity'] !== 'number'

tun sollten Sie versuchen, so etwas wie dieses

const reg = /^\d+$/;

nur für Sie, diese werden Nummern übereinstimmen. Match gegen diese Regex und bestimmen, ob Sie Zahlen haben oder nicht.

Wenn Sie möchten, unterzeichnet übereinstimmen und schweben Zahlen ohne leere Strings, benutzen Sie diese Regex:

/^-?\d+\.?\d*$/

Hier ist, wie Sie es verwenden würde:

const numberRegex = /^-?\d+\.?\d*$/; 

if (!/^\d*$/.test(value)) { 
    errors['price'] = 'Please enter a number'; 
} 
... 
+0

Wie verwenden Sie die Regex Stellen Sie sicher, dass die Eingabe nur Zahlen ist? Ich sehe, was du meinst, warum ich es benutzen sollte, aber ich weiß nicht wirklich wie. – Mjuice

+0

@Mjuice Ich habe meine Antwort mit einer Beispielverwendung aktualisiert. –