2011-02-03 17 views
20

Utilicé la función de coincidencia para la expresión regular.Error de Javascript: "val.match no es una función"

el código que utilizo es

if(val.match(/^s+$/) || val == "") 

pero los errores de javascript con

"val.match is not function" 

no puedo encontrar cuál es el problema,

gracias de antemano

+1

Podemos ver dónde se ha definido 'val'? Asegúrese de que 'val' sea una cadena:' val.toString() '. O puede usar Regex.exec para convertir implícitamente a una cadena: '/^s + $ /. Exec (val)'. – Reid

+0

el val es cadena, justo ahora estoy comprobando que la coincidencia funciona para algunas palabras y no funciona la palabra, – zahir

+2

Definitivamente asegúrese de que val esté definido y una cadena. Además, supongo que es un error tipográfico que no tienes una barra antes de la 's' en tu expresión regular. Si ese es el caso, puede reemplazar su prueba if con "if (val.match (/^\ s * $)" –

Respuesta

26

diría ese val no es una cadena.

recibo el "val.match no funciona" error para el siguiente

var val=12; 
if(val.match(/^s+$/) || val == ""){ 
    document.write("success: " + val); 
} 

El error desaparece si convierte explícitamente a un cordaje (val)

var val=12; 
if(String(val).match(/^s+$/) || val == ""){ 
    document.write("success: " + val); 
} 

Y si Si utiliza una cadena, no necesita hacer la conversión

var val="sss"; 
if(val.match(/^s+$/) || val == ""){ 
    document.write("success: " + val); 
} 
2

NOTA: haciendo de esto una respuesta como se sugiere arriba de mi comentario.

Definitivamente asegúrese de que val esté definido y una cadena. Además, supongo que es un error tipográfico que no tienes una barra antes de la 's' en tu expresión regular. Si ese es el caso, puede reemplazar su caso prueba con "si (val.match (/^\ s * $)"

7

el problema es: val no es cadena

puedo pensar en dos opciones 1) convertir en cadena: podría ser una buena opción si está seguro de Val tiene que ser de cadena

"Igual que el anterior respuesta"

var val=12; 
 
if(String(val).match(/^s+$/) || val == ""){ 
 
    document.write("success: " + val); 
 
}

2) omita la línea: en mi caso, era mejor simplemente verificar el tipo val y omitir si no es cadena, porque no era una buena idea ejecutar la función "coincidencia" de todos modos.

val = 12; 
 
if(val.match) { 
 
    if(val.match(/^s+$/) || val == "") { 
 
    document.write("success: " + val); 
 
    } 
 
} else { 
 
    document.write("not a string: " + val); 
 
}

Cuestiones relacionadas