validator regulares regular one expresiones examples ruby regex

examples - Diferencia entre / A / z y ^ $ en expresiones regulares de Ruby



ruby regex validator (4)

En la documentación que leo:

Use / A y / z para hacer coincidir el inicio y el final de la cadena, ^ y $ coincida con el inicio / final de una línea.

Voy a aplicar una expresión regular para verificar el nombre de usuario (o el correo electrónico es el mismo) enviado por el usuario. ¿Qué expresión debo usar con validates_format_of en el modelo? No puedo entender la diferencia: siempre he usado ^ y $ ...


De acuerdo con Pickaxe :

^ Coincide con el comienzo de una línea.

$ Coincide con el final de una línea.

/A coincide con el comienzo de la cadena.

/z Coincide con el final de la cadena.

/Z Coincide con el final de la cadena a menos que la cadena termine con "/n" , en cuyo caso coincide justo antes de "/n" .

Por lo tanto, use /A y minúsculas /z . Si usa /Z alguien podría colarse en un carácter de nueva línea. Esto no es peligroso, creo, pero podría arruinar algoritmos que supongan que no hay espacios en blanco en la cadena. Dependiendo de sus expresiones regex y longitud de cadena, alguien podría usar un nombre invisible con solo un carácter de nueva línea.

La implementación de JavaScript de Regex trata /A como literal ''A'' ( ref ). Así que ten cuidado y prueba.


Diferencia por ejemplo

  1. /^foo$/ coincide con cualquiera de los siguientes, //Afoo/z/ does not:

whatever1 foo whatever2

foo whatever2

whatever1 foo

  1. /^foo$/ y //Afoo/z/ all coinciden con lo siguiente:

foo


El inicio y el final de una cadena pueden no ser necesariamente lo mismo que el inicio y el final de una línea. Imagine si utilizó lo siguiente como su cadena de prueba:

mi
nombre
es
Andrés

Observe que la cadena tiene muchas líneas: los caracteres ^ y $ permiten hacer coincidir el principio y el final de esas líneas (básicamente tratando el carácter /n como un delímetro), mientras que /A y /Z permiten hacer coincidir el principio y el fin de toda la cadena.


Si depende de la expresión regular para la validación, siempre quiere usar /A y /z . ^ y $ solo coincidirán hasta un carácter de nueva línea, lo que significa que podrían usar un correo electrónico como [email protected]/n<script>dangerous_stuff();</script> y aún así tenerlo validado, ya que la expresión regular solo lo ve todo antes del /n .

Mi recomendación sería simplemente desvincular completamente nuevas líneas de un nombre de usuario o correo electrónico de antemano, ya que no hay una razón legítima para una. Entonces puede usar sin peligro /A /z o ^ $ .