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

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

Tente isto

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

Deve permitir sublinhados e hifens

Akash Yellappa
fonte
Sua solução me ajudou. Obrigado!
Saiyan Prince de
1

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

David Fells
fonte
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-_]*$"
Santosh Shinde
fonte