Ich versuche, eine Telefonnummer mit Yup zu validieren:
phone: Yup.number()
.typeError("That doesn't look like a phone number")
.positive("A phone number can't start with a minus")
.integer("A phone number can't include a decimal point")
.min(8)
.required('A phone number is required'),
.min(8) überprüft, ob die Zahl 8 oder mehr beträgt. Also einfach eintreten 8 wird bestehen. Wie kann ich 8 Zeichen erforderlich machen? 1000 0000 würde passieren?
Filippofilip
Hallo, im Moment löse ich das gleiche Problem wie Sie und habe eine mögliche Lösung gefunden.
Überprüfen Sie die Telefonnummer mit einer Zeichenfolge, die mit Regex übereinstimmt
const phoneRegExp = /^((\\+[1-9]{1,4}[ \\-]*)|(\\([0-9]{2,3}\\)[ \\-]*)|([0-9]{2,4})[ \\-]*)*?[0-9]{3,4}?[ \\-]*[0-9]{3,4}?$/
phoneNumber: Yup.string().matches(phoneRegExp, 'Phone number is not valid')
matches(” “) funktioniert bei mir, es gibt eine Warnung als Mögliche Ablehnung eines nicht behandelten Versprechens (ID: 0): TypeError: Die Eigenschaft „Länge“ von undefiniert kann nicht gelesen werden in React-Native. Bitte hilf mir
– Sirisha
3. Januar 2019 um 11:55
Sirisha, ich denke, das liegt daran, dass deine Variable keine Zeichenfolge ist. Initialisieren Sie Ihre Variable als leere Zeichenfolge und hören Sie dann das onChanged-Ereignis in TextInput ab.
– Filippofilip
5. Januar 2019 um 16:54
Warum \\? Hat bei mir erst funktioniert, nachdem ich überflüssige Escapes entfernt habe.
– OlehZiniak
22. Januar 2020 um 11:45 Uhr
/^((\+[1-9]{1,4}[ -]?)|(\([0-9]{2,3}\)[ -]?)|([0-9]{2,4})[ -]?)*?[0-9]{3,4}[ -]?[0-9]{3,4}$/ hat bei mir am besten funktioniert. @filippofilip Ihr Ausdruck entspricht etwas wie +32———-1111111
– LGenzelis
25. Juni 2020 um 21:58
@LGenzelis Ich habe Ihren regulären Ausdruck ausprobiert – aber dieser erlaubte Zahlen mit mehreren + in der Mitte +32+232232232
Ich habe eine erstellt yup-phone Modul, das verwendet google-libphonenumber Dies ermöglicht genaue Validierungsprüfungen und kann direkt von Github aus installiert werden
const Yup = require('yup');
require('yup-phone');
// validate any phone number (defaults to India for country)
const phoneSchema = Yup.string().phone().required();
phoneSchema.isValid('9876543210'); // → true
// yup-phone.js
const yup = require('yup');
const rePhoneNumber = /^(\+?\d{0,4})?\s?-?\s?(\(?\d{3}\)?)\s?-?\s?(\(?\d{3}\)?)\s?-?\s?(\(?\d{4}\)?)?$/;
module.exports.rePhoneNumber = rePhoneNumber
yup.addMethod(yup.string, "phone", function() {
return this.test("phone", "Phone number is not valid", value =>
rePhoneNumber.test(value)
);
});
Sofern ich unterwegs nichts übersehen habe, konnte ich die Validierung für ein leeres Feld nicht bestehen. Das heißt, ich möchte nur validieren, ob ein Wert vorhanden ist.
– David W.
18. September 2021 um 22:16 Uhr
Ich habe dies ursprünglich positiv bewertet. Allerdings ist die Paketgröße größer als meine gesamte Website. Verwenden Sie es nicht im Frontend
Probieren Sie es aus, es könnte für Sie hilfreich sein.
mobile: Yup.string().matches(/^[6-9]\d{9}$/, {message: "Please enter valid number.", excludeEmptyString: false})
Telefonnummern, die mit den Ziffern 1–5 beginnen, würden nicht validiert
– Rahil Ahmad
5. April 2019 um 4:14
Ja @RahilAhmad, normalerweise beginnen Mobiltelefonnummern in Indien entweder mit 6 oder 7 oder 8 oder 9, daher validiert Regex nur diese Nummern.
– Sirisha
8. April 2019 um 5:09
Es erlaubt Zahlen, die mit 0 beginnen
– Lalitesh Upadhyaya
29. April 2021 um 5:05 Uhr
Vipul Singh
const phoneRegExp = /^((\\+[1-9]{1,4}[ \\-]*)|(\\([0-9]{2,3}\\)[ \\-]*)|([0-9]{2,4})[ \\-]*)*?[0-9]{3,4}?[ \\-]*[0-9]{3,4}?$/
phone_number: Yup.string()
.required("required")
.matches(phoneRegExp, 'Phone number is not valid')
.min(10, "too short")
.max(10, "too long"),
Das funktioniert bei mir am besten … Sie können Ihre eigene Länge festlegen … ich wollte nur 10 Ziffern, nicht weniger oder mehr
Nur eine kleine Zusammenarbeit. In meinem Fall möchte ich nicht validieren, ob die Eingabe leer ist (wenn dies nicht erforderlich ist). Vielen Dank an alle für eure Beispiele!
yup.addMethod(yup.string, "phone", function(messageError="Phone number is not valid") {
const phoneRegExp = /^((\\+[1-9]{1,4}[ \\-]*)|(\\([0-9]{2,3}\\)[ \\-]*)|([0-9]{2,4})[ \\-]*)*?[0-9]{3,4}?[ \\-]*[0-9]{3,4}?$/
return this.test('phone', messageError, value => {
if (value && value.length > 0) {
return phoneRegExp.test(value)
}
return true
})
})
Ich mache etwas Ähnliches mit .transform(). Ist es angemessener, .test() zu verwenden?
– Wolfhoundjesse
8. Okt. 2020 um 14:58
Calvin
Ich habe einen ähnlichen Anwendungsfall und hier ist meine Lösung:
Ich mache etwas Ähnliches mit .transform(). Ist es angemessener, .test() zu verwenden?
– Wolfhoundjesse
8. Okt. 2020 um 14:58
Chris Sandvik
Ich habe dafür ein neues Paket mit dem Namen erstellt Yup-Phone-Lite. Ich hatte das ursprüngliche Yup-Phone-Paket verwendet, aber es verwendet die massive Google-Libphone-Nummer, also habe ich es durch einen kleineren Fork ersetzt.
14531600cookie-checkTelefonnummer mit Ja bestätigen?yes