[RUBY] Je veux pouvoir transmettre des éléments qui ont été validés avec des expressions régulières même s'ils sont laissés vides

introduction

Les expressions régulières peuvent être utilisées pour vérifier le format des valeurs d'entrée telles que les numéros de téléphone et les adresses e-mail.

Si une valeur autre que la chaîne de caractères ou la chaîne numérique spécifiée est saisie, elle sera interceptée lors du contrôle de validation.

Cette fois, je souhaite autoriser la validation même si l'élément spécifié est une expression régulière ou est laissé vide.

Validons le numéro de téléphone

Cette fois, en utilisant le numéro de téléphone comme exemple, essayez d'abord de valider le numéro de téléphone. スクリーンショット 2020-05-17 17.37.14.png


validates :phone_number, format: { with: /\A\d{10,11}\z/ }

Il s'agit d'une expression régulière qui signifie que vous devez entrer un nombre demi-largeur à 10 ou 11 chiffres sans tirets.

Cette fois, je veux entrer le numéro de téléphone de manière arbitraire, donc je n'ai pas écrit présence: vrai, alors j'ai pensé que ce serait bien tel quel ...

un problème est survenu

La validation avec l'expression régulière spécifiée est intervenue, et lorsque j'ai continué avec le champ de saisie vide, je suis resté bloqué dans la validation! スクリーンショット 2020-05-17 17.40.01.png

Cause

Apparemment, si la validation est appliquée avec une expression régulière, une entrée autre que l'expression régulière ne sera pas acceptée même si elle est vide (nil).

Solution 1

Demandez au mentor et utilisez une méthode personnalisée

Il a été dit qu'il existe un moyen de créer une méthode personnalisée telle que "un nombre demi-largeur vide ou à 10 ou 11 chiffres", mais quand je regarde la méthode personnalisée, cela semble très ennuyeux et difficile.

↓ Article de référence pour les méthodes personnalisées https://qiita.com/h1kita/items/772b81a1cc066e67930e

Donc, à la suite d'essais et d'erreurs, je me suis demandé s'il y avait moi-même une autre méthode et j'ai trouvé une solution très simple.

Solution 2

Ajoutez simplement allow_blank: true comme indiqué ci-dessous.

validates :phone_number, format: { with: /\A\d{10,11}\z/ }, allow_blank: true

Cela signifie littéralement que vous pouvez le laisser vide.

Vous pouvez désormais valider sans entrer de numéro de téléphone!

Résumé

Si vous voulez que la valeur d'entrée passe la validation avec une expression régulière ou vide, ajoutez allow_blank: true.

Recommended Posts

Je veux pouvoir transmettre des éléments qui ont été validés avec des expressions régulières même s'ils sont laissés vides
Je veux pouvoir penser et écrire moi-même des expressions régulières. ..
J'ai essayé de pouvoir passer plusieurs objets avec Ractor
Je souhaite pouvoir lire des fichiers en utilisant refile avec administrate [rails6]
Je veux être finalement même à kotlin