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'); }
Tom
fuente
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.

Andy E
fuente
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-_]+$/;
sapht
fuente
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-]+$/;
Grant Humphries
fuente
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
Ivan Ivanov
fuente
# 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.

David Fells
fuente
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
1

Prueba esto

"[A-Za-z0-9_-]+"

Debe permitir guiones bajos y guiones

Akash Yellappa
fuente
Tu solución me ayudó. ¡Gracias!
Príncipe Saiyan
0

prueba este, funciona bien para mí.

"^([a-zA-Z])[a-zA-Z0-9-_]*$"
Santosh Shinde
fuente