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'); }
javascript
regex
Tomek
źródło
źródło
Odpowiedzi:
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.źródło
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-_]+$/;
źródło
RegExp.prototype.test
metody, jeśli interesuje Cię tylko wartość logiczna.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-]+$/;
źródło
Mam głupi błąd. Więc opublikuj tutaj, jeśli ktoś uzna to za przydatne
-\._
- oznacza myślnik, kropkę i podkreślenie\.-_
- oznacza wszystkie znaki w zakresie od kropki do podkreśleniaźródło
Nie uciekaj od podkreślenia. Może powodować jakieś walenie.
źródło
\_
usuwać , ale nigdy nie słyszałem o powodowaniu problemów w JavaScript lub w jakimkolwiek innym stylu wyrażenia regularnego.Spróbuj tego
"[A-Za-z0-9_-]+"
Powinien zezwalać na podkreślenia i łączniki
źródło
spróbuj tego, działa dobrze dla mnie.
"^([a-zA-Z])[a-zA-Z0-9-_]*$"
źródło