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.
Ruby 2.5.1
Rails 5.2
user.rb
class User < ApplicationRecord
validates :age, format: { with: /^[0-9]+$/, message: "Ne peut être saisi que sous forme de valeur numérique."}
end
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 «^», «→
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.
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