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

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.


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-_]+$/;

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-]+$/;

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

# 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.


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


0

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

"^([a-zA-Z])[a-zA-Z0-9-_]*$"
Durch die Nutzung unserer Website bestätigen Sie, dass Sie unsere Cookie-Richtlinie und Datenschutzrichtlinie gelesen und verstanden haben.
Licensed under cc by-sa 3.0 with attribution required.