¿Cuál es la mejor manera de realizar una verificación alfanumérica en un INPUT
campo en JSP
? He adjuntado mi código actual
<script type="text/javascript">
function validateCode(){
var TCode = document.getElementById('TCode').value;
for(var i=0; i<TCode.length; i++)
{
var char1 = TCode.charAt(i);
var cc = char1.charCodeAt(0);
if((cc>47 && cc<58) || (cc>64 && cc<91) || (cc>96 && cc<123))
{
}
else {
alert('Input is not alphanumeric');
return false;
}
}
return true;
}
javascript
validation
t0mcat
fuente
fuente
Respuestas:
Puedes usar esta expresión regular
/^[a-z0-9]+$/i
fuente
""
) no debe coincidir.ñ
no entra en el patrón, sin embargo, el carácter UTF-8 es totalmente válido.charCodeAt()
. Vea jsPerf y mi respuesta a continuación .La inclinación de uso original del autor de la pregunta
str.charCodeAt(i)
parece ser más rápida que la alternativa de expresión regular. En mi prueba en jsPerf, la opción RegExp funciona un 66% más lento en Chrome 36 (y un poco más lento en Firefox 31).Aquí hay una versión limpia del código de validación original que recibe una cadena y devuelve
true
ofalse
:Por supuesto, puede haber otras consideraciones, como la legibilidad. Una expresión regular de una línea es definitivamente más bonita de ver. Pero si le preocupa estrictamente la velocidad, es posible que desee considerar esta alternativa.
fuente
Compruébalo con una expresión regular.
Javascript regexen no tiene clases de caracteres POSIX, por lo que debe escribir rangos de caracteres manualmente:
Aquí
^
significa comienzo de cadena y$
significa final de cadena, y[0-9a-z]+
significa uno o más caracteres de0
a9
O dea
az
.Más información sobre Javascript regexen aquí: https://developer.mozilla.org/en/JavaScript/Guide/Regular_Expressions
fuente
/^[a-z0-9]+$/i
y esto cubrirá tanto letras minúsculas como mayúsculasNo es necesario hacerlo de uno en uno. Simplemente haga una prueba para cualquiera que no sea alfanumérico. Si se encuentra uno, la validación falla.
Si hay al menos una coincidencia de un código no alfanumérico, lo hará
return false
.fuente
Crearía un método de prototipo de cadena:
Entonces, el uso sería:
fuente
Además, este artículo también ayuda a comprender la validación alfanumérica de JavaScript.
fuente
Disculpe todo, no hay controversia. Pero para que la comunidad crezca como lo ha hecho yo en estos años, es bueno tomar algunas notas.
La cadena alfanumérica real es como
"0a0a0a0b0c0d"
y no como"000000"
o"qwertyuio"
.Todas las respuestas que leí aquí, regresaron
true
en ambos casos. Y perdóname, en mi humilde opinión, esto no está bien .Si quiero comprobar si mi
"00000"
cadena es alfanum, mi respuesta "humana" es incuestionablemente FALSA.¿Por qué? Sencillo. No puedo encontrar ningún carácter de letra. Entonces, es una cadena numérica simple
[0-9]
.Por otro lado, si quisiera verificar mi
"abcdefg"
cadena, mi respuesta "humana" es incluso FALSA. No veo números, por lo que no es alfanumérico. Solo alfa[a-zA-Z]
.La respuesta de Michael Martin-Smucker ha sido esclarecedora.
Sin embargo, su objetivo era lograr un mejor rendimiento en lugar de expresiones regulares. Esto es cierto, usando una forma de bajo nivel hay un mejor desempeño. Pero los resultados son los mismos. Las cadenas
"0123456789"
(solo numéricas),"qwertyuiop"
(solo alfabéticas) y"0a1b2c3d4f4g"
(alfanuméricas) regresanTRUE
como alfanuméricas. Misma/^[a-z0-9]+$/i
forma de expresión regular . La razón por la que la expresión regular no funciona es tan simple como obvia. La sintaxis[]
indica o , no y . Entonces, si es solo numérico o si es solo letras, regex regresatrue
.Sin embargo, la respuesta de Michael Martin-Smucker fue esclarecedora. Para mi. Me permitió pensar a "bajo nivel", para crear una función real que procese inequívocamente una cadena alfanumérica. Lo llamé como función relativa de PHP
ctype_alnum
( editar 2020-02-18: donde, sin embargo, esto verifica O y no Y ).Aquí está el código:
... y aquí está la DEMO
Vine a esta discusión porque estaba buscando una alternativa en javascript a la función PHP. No encontré la respuesta "lista para usar", pero como sucede a menudo en Stackoverflow, el concepto de conocimiento y comparación entre sí es algo sublime, que te lleva a pensar en la respuesta de alguien y encontrar juntos la solución que estabas buscando. buscando, pero no pensaste que lo sabías.
¡Y compártelo!
Mejor
Oscar
fuente
return isNumeric || isAlpha;
es alphaNumeric. Lo anterior puede ser útil para algunos.En un ciclo cerrado, probablemente sea mejor evitar las expresiones regulares y codificar sus caracteres:
fuente
Para verificar si input_string es alfanumérico, simplemente use:
fuente