it-swarm.com.de

RegEx für Javascript erlaubt nur alphanumerische Zeichen

Ich muss eine Registrierung finden, die nur alphanumerische Zeichen zulässt. Bisher funktioniert jeder, den ich versuche, nur, wenn die Zeichenfolge alphanumerisch ist, dh sowohl einen Buchstaben als auch eine Zahl enthält. Ich möchte nur einen, der beides erlaubt und nicht beides verlangt.

206
User
/^[a-z0-9]+$/i

^         Start of string
[a-z0-9]  a or b or c or ... z or 0 or 1 or ... 9
+         one or more times (change to * to allow empty string)
$         end of string    
/i        case-insensitive
440
Greg

Wenn Sie ein ersetztes Ergebnis zurückgeben möchten, funktioniert Folgendes:

var a = 'Test123*** TEST';
var b = a.replace(/[^a-z0-9]/gi,'');
console.log(b);

Dies würde zurückkehren:

Test123TEST

Beachten Sie, dass das GI erforderlich ist, da es global bedeutet (nicht nur bei der ersten Übereinstimmung) und nicht zwischen Groß- und Kleinschreibung unterscheidet. Deshalb habe ich a-z anstelle von a-zA-Z. Und das ^ in den Klammern bedeutet "alles, was nicht in diesen Klammern steht".

WARNUNG: Alphanumerisch ist großartig, wenn es genau das ist, was Sie wollen. Wenn Sie dies jedoch in einem internationalen Markt wie dem Namen einer Person oder ihrem geografischen Gebiet verwenden, müssen Sie Unicode-Zeichen berücksichtigen, was nicht der Fall ist. Wenn Sie beispielsweise einen Namen wie "Âlvarö" haben, wird er zu "lvar".

136
Volomike

Verwenden Sie die Word-Zeichenklasse. Folgendes entspricht einem ^[a-zA-Z0-9_]+$:

^\w+$

Erläuterung:

  • ^ Stringanfang
  • \ w ein beliebiges Wortzeichen (A-Z, a-z, 0-9, _).
  • $ end of string

Verwenden /[^\w]|_/g wenn der Unterstrich nicht übereinstimmen soll.

75
Chase Seibert
/^([a-zA-Z0-9 _-]+)$/

der obige reguläre Ausdruck lässt Leerzeichen neben einer Zeichenfolge zu und schränkt Sonderzeichen ein. Er lässt nur a-z, A-Z, 0-9, Leerzeichen, Unterstrich und Bindestrich zu.

34
^\s*([0-9a-zA-Z]*)\s*$

oder, wenn Sie mindestens ein Zeichen möchten:

^\s*([0-9a-zA-Z]+)\s*$

Eckige Klammern kennzeichnen eine Reihe von Zeichen. ^ ist der Beginn der Eingabe. $ ist das Eingabeende (oder der Zeilenumbruch, abhängig von Ihren Optionen).\s ist Leerzeichen.

Das Leerzeichen vor und nach ist optional.

Die Klammern sind der Gruppierungsoperator, mit dem Sie die gewünschten Informationen extrahieren können.

BEARBEITEN: Die fehlerhafte Verwendung des Zeichensatzes\w wurde entfernt.

12
cletus

Das wird funktionieren

^(?=.*[a-zA-Z])(?=.*[0-9])[a-zA-Z0-9]+$

Es werden nur alphanumerische Zeichen akzeptiert:
Testfälle wurden bearbeitet:

dGgs1s23 - valid
12fUgdf  - valid,
121232   - invalid, 
abchfe   - invalid,
 abd()*  - invalid, 
42232^5$ - invalid

oder

Sie können diesen auch ausprobieren. Dieser Ausdruck erfüllte mindestens eine Zahl und ein Zeichen und keine weiteren Sonderzeichen

^(?=.*[0-9])(?=.*[a-zA-Z])([a-zA-Z0-9]+)$

in angular kann testen wie:

$scope.str = '12fUgdf';
var pattern = new RegExp('^(?=.*[0-9])(?=.*[a-zA-Z])([a-zA-Z0-9]+)$');
$scope.testResult = pattern.test($scope.str);

PLUNKER DEMO

Referenziert: Regulärer Ausdruck für alphanumerische Zeichen in Angularjs

6
Skull

Anstatt nach einer gültigen alphanumerischen Zeichenfolge zu suchen, können Sie dies indirekt erreichen, indem Sie die Zeichenfolge auf ungültige Zeichen überprüfen. Überprüfen Sie dazu, ob etwas mit dem Komplement der gültigen alphanumerischen Zeichenfolge übereinstimmt.

/[^a-z\d]/i    

Hier ist ein Beispiel:

var alphanumeric = "someStringHere";
var myRegEx  = /[^a-z\d]/i;
var isValid = !(myRegEx.test(alphanumeric));

Beachten Sie den logischen Nicht-Operator bei isValid, da ich prüfe, ob die Zeichenfolge falsch und nicht gültig ist.

4
Schalk

Erweitern Sie den String-Prototyp, um ihn in Ihrem gesamten Projekt zu verwenden

    String.prototype.alphaNumeric = function() {
        return this.replace(/[^a-z0-9]/gi,'');
    }

Verwendungszweck:

    "I don't know what to say?".alphaNumeric();
    //Idontknowwhattosay
4

Es scheint, dass viele Benutzer bemerkt haben, dass diese regulären Ausdrücke mit ziemlicher Sicherheit fehlschlagen werden, es sei denn, wir arbeiten ausschließlich auf Englisch. Aber ich denke, es gibt einen einfachen Weg, der nicht so begrenzt wäre.

  1. kopieren Sie Ihre Zeichenfolge in GROSSBUCHSTABEN
  2. erstellen Sie eine zweite Kopie in Kleinbuchstaben

Alle Zeichen, die in diesen Zeichenfolgen übereinstimmen, sind definitiv nicht alphabetisch.

let copy1 = originalString.toUpperCase();
let copy2 = originalString.toLowerCase();
for(let i=0; i<originalString.length; i++) {
    let bIsAlphabetic = (copy1[i] != copy2[i]);
}

Optional können Sie Zahlen auch erkennen, indem Sie nur nach den Ziffern 0 bis 9 suchen.

2
John Dorsey

Geben Sie diesen Code in Ihr SCRATCHPAD ein und sehen Sie die Aktion.

var str=String("Blah-Blah1_2,oo0.01&zz%kick").replace(/[^\w-]/ig, '');
2
Abbas

Versuchen Sie dies ... Ersetzen Sie Ihre Feld-ID durch #name ... a-z (a bis z), a-z (a bis z), 0-9 (0 bis 9)

jQuery(document).ready(function($){
    $('#name').keypress(function (e) {
        var regex = new RegExp("^[a-zA-Z0-9\s]+$");
        var str = String.fromCharCode(!e.charCode ? e.which : e.charCode);
        if (regex.test(str)) {
            return true;
        }
        e.preventDefault();
        return false;
    });
});
2
Tanmay Patel

Noch besser als Gayan Dissanayake wies darauf hin.

/^[-\w\s]+$/

Jetzt ^[a-zA-Z0-9]+$ kann dargestellt werden als ^\w+$

Möglicherweise möchten Sie \ s anstelle von Leerzeichen verwenden. Beachten Sie, dass \ s Leerzeichen und nicht nur ein Leerzeichen berücksichtigt.

1
Brian