2012-06-12 23 views
10

Me gustaría saber cuál es la mejor manera de verificar una cadena, por ejemplo (correo electrónico, contraseña, etc.).JavaScript: prueba vs exec

/^...$/i.exec(a) 

vs

/^...$/i.test(a) 
  • ejecutivo devuelve valor
  • prueba cierto

prueba:

// 1° way 
var mail = req.body.mail; 
if(check(mail)){ 

ejecutivo:

// 1° way 
var mail = req.body.mail; 
if(check(mail)){ 

// 2° way 
var mail = check(req.body.mail); 
if(mail){ 

ejecutivo o prueba? y qué número (1 ° o 2 ° si exec)

SOLUCIÓN

prueba es mejor para este caso.

  • seguramente será más rápido.

Pero lo más importante

  • prueba realiza todo su trabajo. Mientras que exec no funcionó, porque se puede hacer más, pero no es necesario.
  • Como dijo Mattias Buelens, usando isMail() es más lógico: es un correo electrónico: sí o no. Mientras que exec: ¿es un correo electrónico: correo electrónico o nulo -> wtf? lol
+0

¿Qué quieres decir con "la mejor manera"? – j08691

+0

1ra. Depende de lo que estás tratando de hacer. ¿Necesita grupos de coincidencia/captura y tal o simplemente validar para comprobar si la cadena proporcionada coincide con una expresión regular? Además, la segunda pregunta se basa en las preferencias, tendrá el mismo resultado. Debe elegir cuál es más legible y mantenible para usted/su equipo. –

+0

hay dos soluciones, hay diferentes, así que creo que una de ellas es la mejor ** EDIT ** @ Fabrício Matté: solo valide. Sí, creo que la primera forma es la mejor porque es más legible y lógica. (para ti;)) –

Respuesta

15

Si solo necesita probar una cadena de entrada para que coincida con una expresión regular, RegExp.test es la más adecuada. Le dará un valor de retorno boolean que lo hace ideal para las condiciones.

RegExp.exec le ofrece un valor de retorno similar a un array con todos los grupos de captura e índices coincidentes. Por lo tanto, es útil cuando necesita trabajar con los grupos o índices capturados después de la coincidencia. (También, it behaves a bit different en comparación con String.match cuando se utiliza el modificador global /g)

En última instancia, no importará mucho en velocidad o eficiencia. La expresión regular seguirá evaluándose y todos los grupos e índices coincidentes estarán disponibles a través del objeto global RegExp (aunque es muy recomendable que use los valores devueltos).

En cuanto a la prueba if, es solo una cuestión de gusto personal.Asignar el resultado de la prueba de expresión regular a una variable con un nombre significativo (como isEmail) podría mejorar la legibilidad, pero aparte de eso, ambos están bien.

+3

Es una buena explicación, a pesar de que hay algunos defectos. "' RegExp.exec' le ofrece un valor de retorno similar a una matriz con ** todos ** grupos de captura e índices coincidentes ". Realmente no. Devolverá una matriz con la primera coincidencia en el índice '[0]' y sus grupos de captura subsiguientes en los siguientes índices. No devuelve todas las coincidencias/grupos de captura, solo la primera coincidencia con todos sus grupos de captura. Sin embargo, iterar a través de ella, por ejemplo, un bucle 'while' que almacena automáticamente la propiedad' lastIndex' en el objeto regex, como se muestra en el enlace MDN que proporcionó. –