В документации я читаю:
Используйте \ A и \ z, чтобы соответствовать началу и концу строки, ^ и $ соответствуют началу / концу строки.
Я собираюсь применить регулярное выражение, чтобы проверить имя пользователя (или адрес электронной почты тот же), представленный пользователем. Какое выражение мне следует использовать validates_format_of
в модели? Я не могу понять разницу: я всегда использовал ^ и $ ...
Ответы:
Если вы используете регулярное выражение для проверки, вы всегда хотите использовать
\A
и\z
.^
и$
будет совпадать только до символа новой строки, что означает, что они могут использовать электронную почту, подобную ей,me@example.com\n<script>dangerous_stuff();</script>
и при этом проверять ее, поскольку регулярное выражение видит только все до\n
.Я бы порекомендовал полностью удалить новые строки из имени пользователя или электронной почты заранее, так как для этого нет достаточных оснований. Тогда вы можете смело использовать ЛИБО
\A
\z
или^
$
.источник
\z
вместо\Z
!$
вместо этого вы будете проверять «конец строки»\z
.По словам Кирки :
Итак, используйте
\A
и строчные\z
. Если вы используете\Z
кого-то, может проникнуть в символ новой строки. Я думаю, это не опасно, но может испортить алгоритмы, которые предполагают, что в строке нет пробелов. В зависимости от вашего регулярного выражения и ограничений длины строки, кто-то может использовать невидимое имя только с символом новой строки.Реализация JavaScript в Regex трактуется
\A
как литерал'A'
( ref ). Так что следи за собой и проверяй.источник
Начало и конец строки не обязательно совпадают с началом и концом строки. Представьте, что вы использовали следующее в качестве тестовой строки:
Обратите внимание , что строка имеет много строк в нем -
^
и$
символы позволяют соответствовать начало и конец этих линий ( в основном лечащих на\n
символ как разделитель) , а\A
и\Z
позволит вам соответствовать начало и конец всей строки.источник
Разница по примеру
/^foo$/
соответствует любому из следующего,/\Afoo\z/
не соответствует:/^foo$/
и/\Afoo\z/
все соответствуют следующему:источник