回答:
検証に正規表現に依存している場合は、常に\A
and を使用する必要があり\z
ます。^
そして正規表現$
は改行文字までしか一致しません。つまりme@example.com\n<script>dangerous_stuff();</script>
、正規表現はの前にあるすべてのものしか表示しないため、メールを使用して検証することができます\n
。
正当な理由がほとんどないため、ユーザー名またはメールから新しい行を完全に削除することをお勧めします。次に、安全にEITHER \A
\z
またはを使用できます^
$
。
\z
代わりに小文字である必要があり \Z
ます!
$
代わりに「文字列の終わり」をチェックしていた場合、それはバイパスされます\z
。
つるはしによると:
^
行頭に一致します。
$
行の終わりに一致します。
\A
文字列の先頭に一致します。
\z
文字列の末尾に一致します。
\Z
文字列がで終わる場合を除いて、文字列の最後と"\n"
一致し"\n"
ます。
したがって、\A
小文字を使用し\z
ます。\Z
誰かが使用すると、改行文字が入り込む可能性があります。これは危険ではないと私は思いますが、文字列に空白がないと仮定するアルゴリズムを台無しにするかもしれません。正規表現と文字列長の制約に応じて、誰かが改行文字だけで不可視の名前を使用する可能性があります。
JavaScriptのRegexの実装は\A
、リテラル'A'
(ref)として扱います。だから、そこに自分自身を見て、テストしてください。