Dalam dokumentasi saya baca:
Gunakan \ A dan \ z untuk mencocokkan awal dan akhir string, ^ dan $ cocok dengan awal / akhir suatu baris.
Saya akan menerapkan ekspresi reguler untuk memeriksa nama pengguna (atau email sama) yang dikirimkan oleh pengguna. Ekspresi mana yang harus saya gunakan validates_format_of
dalam model? Saya tidak dapat memahami perbedaannya: Saya selalu menggunakan ^ dan $ ...
Jawaban:
Jika Anda bergantung pada ekspresi reguler untuk validasi, Anda selalu ingin menggunakan
\A
dan\z
.^
dan$
hanya akan cocok hingga karakter baris baru, yang berarti mereka dapat menggunakan email seperti[email protected]\n<script>dangerous_stuff();</script>
dan masih memvalidasi, karena regex hanya melihat semuanya sebelum\n
.Rekomendasi saya hanya akan menghapus baris baru dari nama pengguna atau email sebelumnya, karena tidak ada alasan yang sah untuk itu. Maka Anda dapat dengan aman menggunakan BAIK
\A
\z
atau^
$
.sumber
\z
bukan\Z
!$
memeriksa "end of string"\z
.Menurut Beliung :
Jadi, gunakan
\A
dan huruf kecil\z
. Jika Anda menggunakan\Z
seseorang, bisa menyelinap dalam karakter baris baru. Ini tidak berbahaya saya pikir, tetapi mungkin mengacaukan algoritma yang menganggap bahwa tidak ada spasi putih di string. Bergantung pada batasan regex dan string-length seseorang dapat menggunakan nama yang tidak terlihat hanya dengan karakter baris baru.Implementasi Javascript dari Regex memperlakukan
\A
sebagai literal'A'
( ref ). Jadi jaga dirimu di luar sana dan uji.sumber
Awal dan akhir suatu string mungkin tidak harus sama dengan awal dan akhir suatu garis. Bayangkan jika Anda menggunakan yang berikut ini sebagai string pengujian Anda:
Perhatikan bahwa string memiliki banyak garis di dalamnya - karakter
^
dan$
memungkinkan Anda untuk mencocokkan awal dan akhir dari garis-garis tersebut (pada dasarnya memperlakukan\n
karakter sebagai delimeter) sementara\A
dan\Z
memungkinkan Anda untuk mencocokkan awal dan akhir dari seluruh string.sumber
Perbedaan Dengan Contoh
/^foo$/
cocok dengan yang berikut ini,/\Afoo\z/
tidak:/^foo$/
dan/\Afoo\z/
semua cocok dengan yang berikut ini:sumber