[RAILS] Behandlung von Zeilenanfang und Zeilenende in regulären Ausdrücken in Ruby

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.

Umgebung

Ruby 2.5.1 Rails 5.2

Fehlerhafte Implementierung

user.rb


class User < ApplicationRecord
  validates :age, format: { with: /^[0-9]+$/, message: "Kann nur als numerischer Wert eingegeben werden."}
end

Details des Fehlers

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 "^", "" ein Sicherheitsrisiko aufweist. `^` → `A` `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.

Verweise

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

Behandlung von Zeilenanfang und Zeilenende in regulären Ausdrücken in Ruby
Über reguläre Ausdrücke in Ruby
Umgang mit Datum und Uhrzeit in Ruby. Verwenden Sie Datum und Uhrzeit richtig.
Zusammenfassung der Hashes und Symbole in Ruby
Informationen zum regulären Ausdruck, der in der Ruby-Submethode verwendet wird
[Ruby] Schließen Sie bestimmte Muster aus und ersetzen Sie sie durch reguläre Ausdrücke
Tatsächlich unterscheidet Ruby zwischen Zeilenumbrüchen und Leerzeichen
[Java] Vergleichsmethode für Zeichenketten und Vergleichsmethode mit regulären Ausdrücken
[Java] Zusammenfassung der regulären Ausdrücke
[Ruby] Ausnahmebehandlung in Funktionen
Schreiben Sie Schlüssel und Werte in Ruby
Implementierung der Validierung mit regulären Ausdrücken
[Einführung in Ruby] Über die Rolle von true und break in der while-Anweisung
Nennen Sie eine Gruppe regulärer Ausdrücke (Java)
Verzeichnisinformationen von DEFAULT_CERT_FILE in Mac Ruby 2.0.0
Blasensortierung durchführen und mit Ruby sortieren auswählen
Erläuterung der Ruby Time- und Date-Objekte
Reguläre Ausdrücke, die 99% der E-Mail-Adressen entsprechen
Tipps zur Behandlung von gRPC-Fehlern in Ruby
Unterschied zwischen "|| =" und "instance_variable_defined?" Im Ruby-Memo
Vergleich von JavaScript-Objekten und Ruby-Klassen
Diskriminierung von Enum in Java 7 und höher