Mit regulären Ausdrücken kann das Format von Eingabewerten wie Telefonnummern und E-Mail-Adressen überprüft werden.
Wenn ein anderer Wert als die angegebene Zeichenfolge oder Zahlenfolge eingegeben wird, wird dieser bei der Validierungsprüfung abgefangen.
Dieses Mal möchte ich zulassen, dass die Validierung auch dann bestanden wird, wenn das angegebene Element ein regulärer Ausdruck ist oder leer bleibt.
Lassen Sie uns diesmal am Beispiel der Telefonnummer zunächst die Telefonnummer überprüfen.
validates :phone_number, format: { with: /\A\d{10,11}\z/ }
Dies ist ein regulärer Ausdruck, dh Sie sollten eine 10-stellige oder 11-stellige Zahl mit halber Breite ohne Bindestriche eingeben.
Dieses Mal möchte ich die Telefonnummer willkürlich eingeben, also habe ich keine Präsenz geschrieben: true, also dachte ich, es wäre in Ordnung, so wie es ist ...
Die Validierung mit dem angegebenen regulären Ausdruck ist durchgebrochen, und als ich mit dem leeren Eingabefeld fortfuhr, blieb ich bei der Validierung hängen!
Wenn die Validierung mit einem regulären Ausdruck angewendet wird, werden offenbar andere Eingaben als der reguläre Ausdruck nicht akzeptiert, selbst wenn sie leer sind (null).
Fragen Sie den Mentor und verwenden Sie eine benutzerdefinierte Methode
Es wurde gesagt, dass es eine Möglichkeit gibt, eine benutzerdefinierte Methode wie "leere oder 10- oder 11-stellige Nummer mit halber Breite" zu erstellen, aber wenn ich mir die benutzerdefinierte Methode anschaue, scheint sie sehr ärgerlich und schwierig zu sein.
↓ Referenzartikel für benutzerdefinierte Methoden https://qiita.com/h1kita/items/772b81a1cc066e67930e
Als Ergebnis von Versuch und Irrtum fragte ich mich, ob es selbst eine andere Methode gab, und fand eine sehr einfache Lösung.
Fügen Sie einfach allow_blank: true hinzu, wie unten gezeigt.
validates :phone_number, format: { with: /\A\d{10,11}\z/ }, allow_blank: true
Dies bedeutet wörtlich, dass Sie es leer lassen können.
Jetzt können Sie validieren, ohne eine Telefonnummer einzugeben!
Wenn der Eingabewert die Validierung mit einem regulären Ausdruck oder einem Leerzeichen bestehen soll, fügen Sie allow_blank: true hinzu.
Recommended Posts