Alfanumérico, guión y subrayado, pero sin espacios, expresión regular, comprobar JavaScript


92

Intentando comparar la entrada con una expresión regular.

El campo solo debe permitir caracteres alfanuméricos, guiones y guiones bajos y NO debe permitir espacios.

Sin embargo, el código siguiente permite espacios.

¿Qué me estoy perdiendo?

var regexp = /^[a-zA-Z0-9\-\_]$/;
var check = "checkme";
if (check.search(regexp) == -1)
    { alert('invalid'); }
else
    { alert('valid'); }

5
Me gusta la respuesta de Andy E a continuación. Además, es posible que desee consultar gskinner.com/RegExr para una edición rápida de expresiones regulares. Es ... bastante dulce.
pixelbobby

Respuestas:


155

Sin embargo, el código siguiente permite espacios.

No, no es así. Sin embargo, solo coincidirá en la entrada con una longitud de 1. Para las entradas con una longitud mayor o igual a 1, necesita +seguir la clase de carácter:

var regexp = /^[a-zA-Z0-9-_]+$/;
var check = "checkme";
if (check.search(regexp) === -1)
    { alert('invalid'); }
else
    { alert('valid'); }

Tenga en cuenta que ni el -(en este caso) ni la _necesidad de escapar.


16

No debe usar String.match sino RegExp.prototype.test (ie /abc/.test("abcd")) en lugar de String.search () si solo está interesado en un valor booleano. También debe repetir su clase de personaje como se explica en la respuesta de Andy E:

var regexp = /^[a-zA-Z0-9-_]+$/;

8
En realidad, debería usar el RegExp.prototype.testmétodo si solo está interesado en un booleano.
Andy E

7

Esta sintaxis es un poco más concisa que las respuestas que se han publicado hasta este punto y logra el mismo resultado:

let regex = /^[\w-]+$/;

1
Considere agregar una nota de que su respuesta también funciona para personajes internacionales. No estoy seguro en JavaScript, pero en bash esto funciona: ʻecho "abc-def däf_ghi" | egrep -wo '(\ w | - | _) +'
Ivan Ogai

4

Tengo un error estúpido. Así que publique aquí, si alguien lo encuentra útil.

  1. -\._ - significa guión, punto y subrayado
  2. \.-_ - significa todos los signos en el rango de punto a subrayado

# 2 solo se aplica si está entre corchetes, es decir, [\.-_] Es un carácter en el rango de punto a subrayado. Pero sin los corchetes, ambos son una secuencia de tres símbolos, y solo difieren en el orden.
erict

1

No escapes del subrayado. Podría estar causando alguna locura.


1
¿Por qué dices eso? Sé que no es necesario escapar del guión bajo , pero nunca he oído hablar de \_causar problemas, en JavaScript o en cualquier otro tipo de expresión regular.
Alan Moore

1
Pura especulación. La expresión se veía bien por lo demás y no debería ser espacios coincidentes en ningún caso, pero simplemente la tiré por ahí. Probablemente debería haber sido un comentario, no una respuesta.
David Fells


Al usar nuestro sitio, usted reconoce que ha leído y comprende nuestra Política de Cookies y Política de Privacidad.
Licensed under cc by-sa 3.0 with attribution required.