Alphanumerisch, Bindestrich und Unterstrich, aber keine Leerzeichen, regulärer Ausdruck, überprüfen JavaScript

89

Es wird versucht, die Eingabe anhand eines regulären Ausdrucks zu überprüfen.

Das Feld sollte nur alphanumerische Zeichen, Bindestriche und Unterstriche zulassen und KEINE Leerzeichen zulassen.

Der folgende Code erlaubt jedoch Leerzeichen.

Was vermisse ich?

var regexp = /^[a-zA-Z0-9\-\_]$/;
var check = "checkme";
if (check.search(regexp) == -1)
    { alert('invalid'); }
else
    { alert('valid'); }
Tom
quelle
5
Ich mag die Antwort von Andy E unten. Vielleicht möchten Sie auch gskinner.com/RegExr für eine schnelle Regex-Bearbeitung auschecken . Es ist ... ziemlich süß.
Pixelbobby

Antworten:

151

Der folgende Code erlaubt jedoch Leerzeichen.

Nein, das tut es nicht. Es stimmt jedoch nur mit Eingaben mit einer Länge von 1 überein. Für Eingaben mit einer Länge größer oder gleich 1 benötigen Sie +Folgendes, um der Zeichenklasse zu folgen:

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

Beachten Sie, dass weder die -(in diesem Fall) noch die _Notwendigkeit entkommen.

Andy E.
quelle
16

Sie sollten nicht String.match verwenden, sondern RegExp.prototype.test (dh /abc/.test("abcd")) anstelle von String.search (), wenn Sie nur an einem booleschen Wert interessiert sind. Sie müssen auch Ihre Charakterklasse wiederholen, wie in der Antwort von Andy E erklärt:

var regexp = /^[a-zA-Z0-9-_]+$/;
sapht
quelle
8
Eigentlich sollten Sie die RegExp.prototype.testMethode verwenden, wenn Sie nur an einem Booleschen Wert interessiert sind.
Andy E
7

Diese Syntax ist etwas prägnanter als die Antworten, die bis zu diesem Punkt veröffentlicht wurden, und erzielt das gleiche Ergebnis:

let regex = /^[\w-]+$/;
Grant Humphries
quelle
1
Fügen Sie einen Hinweis hinzu, dass Ihre Antwort auch für internationale Zeichen funktioniert. Ich bin mir in JavaScript nicht sicher, aber in Bash funktioniert dies: `echo" abc-def däf_ghi "| egrep -wo '(\ w | - | _) +'
Ivan Ogai
4

Habe dummen Fehler. Also poste hier, wenn jemand es nützlich findet

  1. -\._ - bedeutet Bindestrich, Punkt und Unterstrich
  2. \.-_ - bedeutet, dass alle Zeichen im Bereich von Punkt bis Unterstrich liegen
Ivan Ivanov
quelle
# 2 gilt nur, wenn es in eckigen Klammern steht, dh [\.-_] Ist ein Zeichen im Bereich von Punkt bis Unterstrich. Aber ohne die eckigen Klammern sind beide eine Folge von drei Symbolen und unterscheiden sich nur in der Reihenfolge.
Erict
1

Entkomme nicht dem Unterstrich. Könnte etwas Verrücktheit verursachen.

David Fells
quelle
1
Warum sagst du das? Ich weiß, dass der Unterstrich nicht maskiert werden muss, aber ich habe noch nie davon gehört \_, Probleme in JavaScript oder einem anderen regulären Ausdruck zu verursachen.
Alan Moore
1
Reine Spekulation. Der Ausdruck sah ansonsten gut aus und sollte auf keinen Fall mit Leerzeichen übereinstimmen, aber ich habe ihn einfach rausgeworfen. Wahrscheinlich sollte ein Kommentar keine Antwort sein.
David Fells
1

Versuche dies

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

Sollte Unterstriche und Bindestriche zulassen

Akash Yellappa
quelle
Ihre Lösung hat mir geholfen. Vielen Dank!
Saiyajin Prinz
0

versuchen Sie dieses, es funktioniert gut für mich.

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