wake-up-neo.com

Regulärer Ausdruck: Erlaube Buchstaben, Zahlen und Leerzeichen (mit mindestens einem Buchstaben oder einer Ziffer)

Ich verwende derzeit diesen Regex ^[A-Z0-9 _]*$, um Buchstaben, Zahlen, Leerzeichen und Unterstriche zu akzeptieren. Ich muss es ändern, um mindestens eine Zahl oder einen Buchstaben irgendwo in der Zeichenfolge zu benötigen. Jede Hilfe wäre dankbar!

Dies wäre für die Überprüfung von Benutzernamen für meine Website. Ich möchte eigentlich so viele Zeichen wie möglich unterstützen, möchte aber nur sicherstellen, dass ich die Code-Injektion verhindere und dass die Zeichen für alle Benutzer gut angezeigt werden. Ich bin also definitiv offen für Regex-Validierungsvorschläge, die einen breiteren Satz von Zeichen unterstützen würden.

40
makeee

Sie müssen lediglich Ihre aktuelle RE angeben, gefolgt von einem Buchstaben/einer Nummer, gefolgt von Ihrer aktuellen RE:

^[A-Z0-9 _]*[A-Z0-9][A-Z0-9 _]*$

Da Sie jetzt angegeben haben, dass es sich um Javascript REs handelt, gibt es eine nützliche Site hier , auf der Sie das RE mit Eingabedaten testen können.

Wenn Sie auch Kleinbuchstaben wünschen:

^[A-Za-z0-9 _]*[A-Za-z0-9][A-Za-z0-9 _]*$
55
paxdiablo

Um fortzufahren und einen Punkt da draußen zu bekommen, anstatt diese wiederholt zu verwenden:

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

Ich habe zwei (hoffentlich bessere) Ersetzungen für diese beiden:

[\w ]
[^\W_]

Die erste entspricht einem beliebigen Word-Zeichen (alphanumerisch und _ sowie Unicode) und dem Leerzeichen. Die Sekunde passt zu allem, was nicht ein Nicht-Word-Zeichen oder ein Unterstrich ist (nur alphanumerische Zeichen sowie Unicode).

Wenn Sie keinen Unicode-Abgleich wünschen, bleiben Sie bei den anderen Antworten. Aber diese sehen einfach besser aus (meiner Meinung nach). Wenn wir die "bevorzugte" Antwort aus dieser Schrift nehmen und die kürzeren Regex verwenden, erhalten wir:

^[\w ]*[^\W_][\w ]*$

Vielleicht lesbarer, vielleicht weniger. Sicher kürzer. Deine Entscheidung.

BEARBEITEN:

Nur als Anmerkung, ich gehe hier von Perl-artigen Regexen aus. Ihre Regex-Engine unterstützt möglicherweise Dinge wie\w und\W.

EDIT 2:

Testete meine mit dem JS Regex-Tester, mit dem jemand verlinkt hat, und einige grundlegende Beispiele funktionierten gut. Ich habe nichts umfangreiches gemacht, wollte nur sicherstellen, dass\w und\W in JS einwandfrei funktionieren.

EDIT 3:

Ich habe versucht, Unicode mit der JS regex-Tester-Site zu testen. Ich habe das Problem entdeckt: Diese Seite verwendet ISO anstelle von Unicode. Kein Wunder, dass mein japanischer Input nicht übereinstimmte. Nun gut, das sollte nicht schwer zu beheben sein:

<meta http-equiv="Content-Type" content="text/html; charset=utf-8">

Oder so. Ich weiß nicht, was bis zu JavaScript getan werden sollte, aber ich bin mir sicher, dass es nicht schwer ist.

13
Chris Lutz
^[ _]*[A-Z0-9][A-Z0-9 _]*$

Sie können optional einige Leerzeichen oder Unterstriche im Vordergrund haben, dann benötigen Sie einen Buchstaben oder eine Zahl und danach eine beliebige Anzahl von Zahlen, Buchstaben, Leerzeichen oder Unterstrichen.

Etwas, das nur Leerzeichen und Unterstriche enthält, schlägt im [A-Z0-9]-Teil fehl.

9

Sie können eine Lookaround verwenden: 

^(?=.*[A-Za-z0-9])[A-Za-z0-9 _]*$

Es wird im Voraus geprüft, ob die Zeichenfolge einen Buchstaben oder eine Zahl enthält. Wenn dies der Fall ist, wird überprüft, ob die restlichen Zeichen Ihren Anforderungen entsprechen. Dies kann wahrscheinlich verbessert werden, scheint aber bei meinen Tests zu funktionieren. 

AKTUALISIEREN: 

Hinzufügen von Modifikationen vorgeschlagen von Chris Lutz

^(?=.*[^\W_])[\w ]*$/
7
gpojd

für mich @ "^ [\ w] + $" funktioniert, geben Sie Zahl, Alphabet und Leerzeichen ein, müssen aber mindestens einen Buchstaben oder eine Zahl eingeben.

2
SOFextreme
$("#ValuationName").bind("keypress", function (event) {
    if (event.charCode!=0) {
        var regex = new RegExp("^[a-zA-Z ]+$");
        var key = String.fromCharCode(!event.charCode ? event.which : event.charCode);
        if (!regex.test(key)) {
            event.preventDefault();
            return false;
        }
    }
});
0
areeb

Dies wird gegen Sonderzeichen und führende und nachgestellte Leerzeichen geprüft:

var strString = "Your String";

strString.match(/^[A-Za-z0-9][A-Za-z0-9 ]\*[A-Za-z0-9]\*$/)
0
Ajay Nair

Sie können dies einfach zur Datei jquery.validationEngine-en.js hinzufügen 

    "onlyLetterNumberSp": {
                "regex": ^[A-Za-z0-9 _]*[A-Za-z0-9][A-Za-z0-9 _]*$,
                "alertText": "* No special characters allowed"
          },

und nenne es im Textfeld als 

<input type="text" class="form-control validate[required,custom[onlyLetterNumberSp]]"  id="title" name="title" placeholder="Title"/>
0
Minu Alex