2011-12-16 66 views
7

No soy un experto con expresiones regulares pero probé con la validación de un campo que permite datos alfanuméricos con espacios pero no con otros caracteres especiales. Donde linkTitle es el nombre de la variable para probar he intentado con la siguiente expresión regular en mi condicionaljavascript regex para validar texto alfanumérico con espacios y rechazar caracteres especiales

/[^A-Za-z\d\s]/.test(linkTitle) 
/[^A-Za-z0-9\s]/.test(linkTitle) 
/[^A-Za-z\d ]/.test(linkTitle) 

y ninguno de estos trabajado ... Tengo curiosidad por saber qué salió mal con el uso de la expresión regular \ s cuales aparentemente se refiere a espacios en blanco y lo que sería la expresión correcta para ajustarse a la factura.

Gracias de antemano!

+0

Cuando dice 'spaces' Qué quiere decir' ' ''caracteres, o te refieres a incluir todos los demás caracteres de espacio como'' \ f', '\ t'', etc. – zzzzBov

+0

¿Cuáles son sus condiciones de falla de aprobación? escribe una prueba unitaria simple. – zzzzBov

+0

digamos que por el momento cualquier espacio en blanco como \ t \ v \ f es aceptable para la entrada – optimusprime619

Respuesta

17

Creo que desea hacer coincidir el comienzo de la cadena una vez, luego use el Cierre positivo -uno o más- de sus letras, espacios o dígitos, y luego el final de la cadena.

/^[A-Za-z\d\s]+$/.test(linkTitle) 

probado con:

var reg = /^[A-Za-z\d\s]+$/; 
["Adam", "Ada m", "A1dam", "A!dam", 'sdasd 213123&*&*&'].forEach(function (str) { 
    console.log(reg.test(str + "\n")); 
}); 

Muestra true, true, true, false, false


O si desea permitir que las cadenas vacías, se puede usar la misma expresión regular, pero con el cierre de Kleene-cero o más-de letras, dígitos o espacios

var regAllowEmpty = /^[A-Za-z\d\s]*$/; 
["", "Adam", "Ada m", "A1dam", "A!dam", 'sdasd 213123&*&*&'].forEach(function (str) { 
    console.log(regAllowEmpty.test(str + "\n")); 
}); 

nota que forEach no funcionará en los navegadores antiguos - esto es sólo para las pruebas

+0

Esto devolverá verdadero para cualquier entrada. Pruebe uno o más en su lugar – hugomg

+0

@missingno - Estaba golpeando mi cabeza contra la pared probando esto tratando de descubrir qué estaba mal - ¡gracias! –

+0

OP regexs coincidiría con cualquier char solo –

1

Cualquiera de sus tres expresiones regulares aquí coincidirá con cualquier carácter individual que es no uno entre [ y ] excluyendo ^ por supuesto .

El problema puede deberse a la forma en que interpreta el resultado proporcionado por test(). Aquí si la expresión regular coincide con la cadena linkTitle, y test devuelve verdadero; esto significa que tiene un carácter incorrecto en la entrada (ni una letra mayúscula, ni en minúscula, ni un dígito ni un espacio).

han puesto a prueba sus regexs:

/[^A-Za-z\d\s]/.test('0 '); // no match, false, input is ok 
/[^A-Za-z\d\s]/.test('0 $'); // match, true, input is wrong 
+0

agradezco la respuesta pero entiendo el operador NOT y estoy claro con mi acción condicional basada en ello. – optimusprime619

+0

bien, pero entonces, ¿qué hay de malo en tu ejemplo? ¿No quieres detectar un char incorrecto en la entrada? Las tres expresiones regulares se comportan de la misma manera, y funcionan. –

Cuestiones relacionadas