Alfanumeryczne, myślnik i podkreślenie, ale bez spacji, wyrażenie regularne sprawdź JavaScript


92

Próbuję porównać dane wejściowe z wyrażeniem regularnym.

Pole powinno zawierać tylko znaki alfanumeryczne, myślniki i podkreślenia, a NIE powinno dopuszczać spacji.

Jednak poniższy kod zezwala na spacje.

czego mi brakuje?

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

5
Podoba mi się odpowiedź Andy E. poniżej. Możesz również sprawdzić gskinner.com/RegExr, aby szybko edytować wyrażenie regularne. To ... całkiem słodkie.
pixelbobby

Odpowiedzi:


155

Jednak poniższy kod zezwala na spacje.

Nie, to nieprawda. Jednak będzie pasować tylko do danych wejściowych o długości 1. W przypadku danych wejściowych o długości większej lub równej 1 potrzebujesz +następującej klasy znaków:

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

Zauważ, że ani -(w tym przypadku), ani _potrzeba ucieczki.


16

Nie powinieneś używać String.match, ale RegExp.prototype.test (tj. /abc/.test("abcd")) Zamiast String.search (), jeśli interesuje Cię tylko wartość logiczna. Musisz także powtórzyć swoją klasę postaci, jak wyjaśnił w odpowiedzi Andy E:

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

8
Właściwie powinieneś użyć tej RegExp.prototype.testmetody, jeśli interesuje Cię tylko wartość logiczna.
Andy E

7

Ta składnia jest nieco bardziej zwięzła niż odpowiedzi, które zostały opublikowane w tym miejscu i daje ten sam wynik:

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

1
Rozważ dodanie uwagi, że Twoja odpowiedź działa również dla znaków międzynarodowych. Nie jestem pewien w JavaScript, ale w bash to działa: ʻecho "abc-def däf_ghi" | egrep -wo '(\ w | - | _) +'
Ivan Ogai

4

Mam głupi błąd. Więc opublikuj tutaj, jeśli ktoś uzna to za przydatne

  1. -\._ - oznacza myślnik, kropkę i podkreślenie
  2. \.-_ - oznacza wszystkie znaki w zakresie od kropki do podkreślenia

# 2 ma zastosowanie tylko wtedy, gdy jest w nawiasach kwadratowych, tj. [\.-_] To znak w zakresie od kropki do podkreślenia. Ale bez nawiasów kwadratowych oba są sekwencją trzech symboli i różnią się po prostu kolejnością.
erict

1

Nie uciekaj od podkreślenia. Może powodować jakieś walenie.


1
Dlaczego to mówisz? Wiem, że podkreślenia nie trzeba\_ usuwać , ale nigdy nie słyszałem o powodowaniu problemów w JavaScript lub w jakimkolwiek innym stylu wyrażenia regularnego.
Alan Moore

1
Czysta spekulacja. Poza tym wyrażenie wyglądało dobrze i w żadnym wypadku nie powinno pasować do spacji, ale po prostu je wyrzuciłem. Prawdopodobnie powinien to być komentarz, a nie odpowiedź.
David Fells


Korzystając z naszej strony potwierdzasz, że przeczytałeś(-aś) i rozumiesz nasze zasady używania plików cookie i zasady ochrony prywatności.
Licensed under cc by-sa 3.0 with attribution required.