Als ich versuchte, die Validierung des Modells mit einem regulären Ausdruck in Rails zu überprüfen, ist ein Fehler aufgetreten. Notieren Sie sich dies als Memorandum.
Ruby 2.5.1
Rails 5.2
user.rb
class User < ApplicationRecord
validates :age, format: { with: /^[0-9]+$/, message: "Kann nur als numerischer Wert eingegeben werden."}
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?
Was den Inhalt des Fehlers betrifft, so scheint es, dass "\ A", "\ z" verwendet werden kann, weil "^", "→
z Ist dies nicht der Fall, können Sie die Option
: multiline => true` hinzufügen, um zu verhindern, dass der Fehler auch in Code auftritt, der Schwachstellen enthält.
Nach meinen Recherchen sind reguläre Ausdrücke als Sicherheitsmaßnahme in Rails 4 und höher strenger geworden.
Wenn Sie in Ruby eine Übereinstimmung mit einem bestimmten Kopf und Ende herstellen möchten, ist es besser, diese wie folgt zu implementieren.
Es gibt eine Möglichkeit, die Option : multiline => true
hinzuzufügen, aber im Fall der Validierungsverarbeitung war es meiner Meinung nach besser, sie nicht anzugeben, es sei denn, es gibt einen besonderen Grund.
user.rb
class User < ApplicationRecord
validates :age, format: { with: /\A[0-9]+\z/, message: "Kann nur als numerischer Wert eingegeben werden."}
end
Derzeit ist es in der offiziellen Ruby-Referenz wie folgt definiert.
^ Entspricht dem Zeilenanfang. Der Zeilenanfang bedeutet den Beginn einer Zeichenfolge oder nach einem Zeilenumbruch. $ Entspricht dem Zeilenende. Das Ende einer Zeile bedeutet das Ende einer Zeichenfolge oder vor einem Zeilenumbruch. \ A Entspricht dem Anfang der Zeichenfolge. \ z Entspricht dem Ende der Zeichenfolge.
Verwenden Sie \ A und \ z anstelle von ^ und $ für die Validierung normaler Ausdrücke Reguläre Ausdrücke sind in Rails 4 strenger geworden. Ruby 2.7.0 Referenzhandbuch Regulärer Ausdruck
Recommended Posts