Alfanumérico, traço e sublinhado, mas sem espaços, verificação de expressão regular JavaScript


94

Tentando comparar a entrada com uma expressão regular.

O campo deve permitir apenas caracteres alfanuméricos, travessões e sublinhados e NÃO deve permitir espaços.

No entanto, o código abaixo permite espaços.

o que estou perdendo?

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

5
Eu gosto da resposta de Andy E abaixo. Além disso, você pode querer verificar gskinner.com/RegExr para uma edição rápida de regex. É ... muito doce.
pixelbobby

Respostas:


157

No entanto, o código abaixo permite espaços.

Não, não importa. No entanto, ele corresponderá apenas na entrada com um comprimento de 1. Para entradas com um comprimento maior ou igual a 1, você precisa +seguir a classe de caracteres:

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

Observe que nem o -(neste caso) nem a _necessidade de escape.


16

Você não deve usar String.match, mas RegExp.prototype.test (ie /abc/.test("abcd")) em vez de String.search () se estiver interessado apenas em um valor booleano. Você também precisa repetir sua classe de personagem, conforme explicado na resposta de Andy E:

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

8
Na verdade, você deve usar o RegExp.prototype.testmétodo se estiver interessado apenas em um booleano.
Andy E

9

Esta sintaxe é um pouco mais concisa do que as respostas que foram postadas até este ponto e atinge o mesmo resultado:

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

1
Considere adicionar uma observação de que sua resposta também funciona para personagens internacionais. Não tenho certeza em JavaScript, mas em bash isso funciona: `echo" abc-def däf_ghi "| egrep -wo '(\ w | - | _) +'
Ivan Ogai

5

Erro estúpido. Então poste aqui, se alguém achar útil

  1. [-\._] - significa hífen, ponto e sublinhado
  2. [\.-_] - significa todos os sinais no intervalo de ponto a sublinhado

# 2 só se aplica se estiver entre colchetes, ou seja, [\.-_] É um caractere no intervalo de ponto a sublinhado. Mas sem os colchetes, ambos são uma sequência de três símbolos e apenas diferem na ordem.
erigido em


1

Não escape do sublinhado. Pode estar causando alguma confusão.


1
Por que você diz isso? Eu sei que o sublinhado não precisa ser escapado, mas nunca ouvi falar de \_causar problemas, em JavaScript ou qualquer outro tipo de regex.
Alan Moore

1
Especulação pura. A expressão parecia boa de outra forma e não deveria corresponder a espaços em nenhum caso, mas eu apenas a joguei fora. Provavelmente deveria ter sido um comentário, não uma resposta.
David Fells

0

experimente este, está funcionando bem para mim.

"^([a-zA-Z])[a-zA-Z0-9-_]*$"
Ao utilizar nosso site, você reconhece que leu e compreendeu nossa Política de Cookies e nossa Política de Privacidade.
Licensed under cc by-sa 3.0 with attribution required.