[RAILS] Gestion du début et de la fin de ligne dans les expressions régulières dans Ruby

Lorsque j'ai essayé de vérifier la validation du modèle avec une expression régulière dans Rails, une erreur s'est produite, alors faites une note comme mémorandum.

environnement

Ruby 2.5.1 Rails 5.2

Implémentation en erreur

user.rb


class User < ApplicationRecord
  validates :age, format: { with: /^[0-9]+$/, message: "Ne peut être saisi que sous forme de valeur numérique."}
end

Détails de l'erreur

The provided regular expression is using multiline anchors (^ or $), which may present a security risk. Did you mean to use \A and \z, or forgot to add the :multiline => true option?

Quant au contenu de l'erreur, il semble que l'on dise que «\ A», «\ z» peut être utilisé car «^», «» présente un risque de sécurité. `^` → `A` `z Si ce n'est pas le cas, vous pouvez ajouter l'option: multiline => true` pour empêcher l'erreur de se produire même dans un code contenant des vulnérabilités.

Selon mes recherches, les expressions régulières sont devenues plus strictes en tant que mesure de sécurité dans Rails 4 et versions ultérieures.

Dans Ruby, si vous voulez faire une correspondance avec une tête et une extrémité spécifiques, il semble préférable de l'implémenter comme suit. Il existe un moyen d'ajouter l'option : multiline => true, mais dans le cas du traitement de validation, j'ai senti qu'il valait mieux ne pas le spécifier à moins qu'il y ait une raison particulière.

user.rb


class User < ApplicationRecord
  validates :age, format: { with: /\A[0-9]+\z/, message: "Ne peut être saisi que sous forme de valeur numérique."}
end

Pour le moment, il est défini comme suit dans la référence officielle Ruby.

^ Correspond au début de la ligne. Le début d'une ligne signifie le début d'une chaîne de caractères ou après un saut de ligne. $ Correspond à la fin de la ligne. La fin d'une ligne signifie la fin d'une chaîne de caractères ou avant un saut de ligne. \ A Correspond au début de la chaîne. \ z Correspond à la fin de la chaîne.

Références

Utilisez \ A et \ z au lieu de ^ et $ pour la validation d'expression normale Les expressions régulières sont devenues plus strictes dans Rails 4. Expression régulière du manuel de référence Ruby 2.7.0

Recommended Posts

Gestion du début et de la fin de ligne dans les expressions régulières dans Ruby
À propos des expressions régulières dans Ruby
Traitement de la date et de l'heure en Ruby. Utilisez correctement la date et l'heure.
Résumé des hachages et symboles dans Ruby
À propos de l'expression régulière utilisée dans la méthode ruby sub
[Ruby] Exclure et remplacer des modèles spécifiques par des expressions régulières
En fait, Ruby fait la distinction entre les sauts de ligne et les espaces
[Java] Méthode de comparaison de chaînes de caractères et méthode de comparaison utilisant des expressions régulières
[Java] Résumé des expressions régulières
[Ruby] Gestion des exceptions dans les fonctions
Ecrire des clés et des valeurs dans Ruby
Implémentation de la validation à l'aide d'expressions régulières
[Introduction à Ruby] À propos du rôle de true et break in the while statement
Nommer un groupe d'expressions régulières (Java)
Informations de répertoire de DEFAULT_CERT_FILE dans Mac ruby 2.0.0
Faire un tri à bulles et sélectionner le tri avec Ruby
Explication des objets Ruby Time et Date
Expressions régulières qui correspondent à 99% des adresses e-mail
Conseils pour la gestion des erreurs de gRPC dans Ruby
Différence entre "|| =" et "instance_variable_defined?" Dans Ruby memo
Comparaison des objets JavaScript et des classes Ruby
Discrimination d'énum dans Java 7 et supérieur