Na documentação que li:
Use \ A e \ z para corresponder ao início e fim da sequência, ^ e $ correspondem ao início / fim de uma linha.
Vou aplicar uma expressão regular para verificar o nome de usuário (ou o e-mail é o mesmo) enviado pelo usuário. Com qual expressão devo usar validates_format_of
no modelo? Não consigo entender a diferença: sempre usei ^ e $ ...
Respostas:
Se você estiver dependendo da expressão regular para validação, sempre desejará usar
\A
e\z
.^
e$
corresponderá apenas até um caractere de nova linha, o que significa que eles poderiam usar um email como[email protected]\n<script>dangerous_stuff();</script>
e ainda assim validá-lo, pois a regex vê apenas tudo antes do\n
.Minha recomendação seria remover completamente novas linhas de um nome de usuário ou e-mail com antecedência, já que não há praticamente nenhuma razão legítima para isso. Então você pode usar com segurança QUALQUER
\A
\z
ou^
$
.fonte
\z
vez de\Z
!$
verificasse "fim da string" em vez de\z
.De acordo com Pickaxe :
Então, use
\A
e em minúsculas\z
. Se você usar\Z
alguém, pode se infiltrar em um caractere de nova linha. Acho que isso não é perigoso, mas pode estragar algoritmos que assumem que não há espaço em branco na string. Dependendo da sua expressão regular e das restrições de comprimento, alguém pode usar um nome invisível com apenas um caractere de nova linha.A implementação do Regex por JavaScript trata
\A
como um literal'A'
( ref ). Portanto, observe-se lá fora e teste.fonte
O início e o fim de uma sequência podem não ser necessariamente a mesma coisa que o início e o final de uma linha. Imagine se você usou o seguinte como sua sequência de teste:
Observe que a corda tem muitas linhas nele - o
^
e$
caracteres permitem que você combinar com o começo eo fim dessas linhas (basicamente tratam o\n
personagem como um delimitador), enquanto\A
e\Z
permitem que você para combinar com o início eo fim de toda a cadeia.fonte
Diferença por exemplo
/^foo$/
corresponde a um dos seguintes,/\Afoo\z/
não:/^foo$/
e/\Afoo\z/
todos correspondem ao seguinte:fonte