[RUBY] Ich möchte in der Lage sein, Elemente zu übergeben, die mit regulären Ausdrücken validiert wurden, auch wenn sie leer bleiben

Einführung

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 die Telefonnummer überprüfen

Lassen Sie uns diesmal am Beispiel der Telefonnummer zunächst die Telefonnummer überprüfen. スクリーンショット 2020-05-17 17.37.14.png


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 ...

ein Problem ist aufgetreten

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! スクリーンショット 2020-05-17 17.40.01.png

Ursache

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).

Lösung 1

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.

Lösung 2

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!

Zusammenfassung

Wenn der Eingabewert die Validierung mit einem regulären Ausdruck oder einem Leerzeichen bestehen soll, fügen Sie allow_blank: true hinzu.

Recommended Posts

Ich möchte in der Lage sein, Elemente zu übergeben, die mit regulären Ausdrücken validiert wurden, auch wenn sie leer bleiben
Ich möchte in der Lage sein, selbst reguläre Ausdrücke zu denken und zu schreiben. ..
Ich habe versucht, mit Ractor mehrere Objekte übergeben zu können
Ich möchte in der Lage sein, Dateien mit refile mit administrate [rails6] zu lesen.
Ich möchte irgendwann sogar in Kotlin sein