RegEx für Javascript erlaubt nur alphanumerische Zeichen

237

Ich muss eine reg ex 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 eine, die beides erlaubt und nicht beides erfordert.

Benutzer
quelle

Antworten:

511
/^[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

Update (unterstützt universelle Zeichen)

Wenn Sie benötigen, dass dieser reguläre Ausdruck universelle Zeichen unterstützt, finden Sie hier eine Liste der Unicode-Zeichen.

beispielsweise: /^([a-zA-Z0-9\u0600-\u06FF\u0660-\u0669\u06F0-\u06F9 _.-]+)$/

Dies wird Persisch unterstützen.

Greg
quelle
50
[az] stimmt nicht mit internationalen Zeichen überein.
Eric Normand
23
Wow - ich glaube nicht, dass ich Regex jemals gründlich verstanden habe, bis es auf diese einfache Weise zerlegt wurde. Vielen Dank!
Matt Cashatt
Problem - ohne / g ersetzen Sie die Übereinstimmungen nur vor einem Zeilenumbruch.
Volomike
5
Ein anderer Weg wäre, [^\W_]aber [a-z0-9]/ i ist ein offensichtlicher Weg.
Vitim.us
36
@ Greg, es macht mir Spaß, wie Sie Ihre Regex-bezogenen Antworten erklären. Regexes ohne Erklärungen sind meiner Meinung nach irgendwie nutzlos. Weil Sie das einmalige "Ja, es funktioniert" erhalten und plötzlich, wenn Sie es ändern müssen, mit einem anderen Anwendungsfall zurückkommen, anstatt tatsächlich zu lernen, was die Regex tut . Außerdem sind Sie leichter zu verstehen als die Regex-Dokumentation: P
Chris Cirefice
147

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

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 notwendig ist, weil es global (nicht nur bei der ersten Übereinstimmung) und unabhängig von Groß- und Kleinschreibung bedeutet, weshalb ich az anstelle von a-zA-Z habe. Und das ^ in den Klammern bedeutet "alles, was nicht in diesen Klammern steht".

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

Volomike
quelle
3
Dies ist eine großartige Antwort mit der Erklärung. Denken Sie daran, Leerzeichen zu berücksichtigen, wenn Sie diese benötigen. .replace (/ [^ a-z0-9 \] / gi, '')
Joe Johnston
82

Verwenden Sie das Wort Zeichenklasse. Folgendes entspricht a ^[a-zA-Z0-9_]+$:

^\w+$

Erläuterung:

  • ^ Anfang der Zeichenfolge
  • \ w ein beliebiges Wortzeichen (AZ, az, 0-9, _).
  • $ Ende der Zeichenfolge

Verwenden /[^\w]|_/gSie diese Option, wenn Sie den Unterstrich nicht abgleichen möchten.

Chase Seibert
quelle
20
\ w entspricht tatsächlich [a-zA-Z_0-9], sodass Ihr RegEx auch mit Unterstrichen [_] übereinstimmt.
Martin Brown
Fast alphanumerisch ist überhaupt nicht alphanumerisch, aber danke, dass du mir sehr geholfen hast
ajax333221
Richtig, keine strenge Antwort auf das Q wie gepostet, aber genau das, wonach ich gesucht habe.
Prototyp
Sorry, aber dies passt nicht zu internationalen Charakteren wie Ä
Alex Mi
Schade, dass dies meine Akzente entfernt
Miguel
38
/^([a-zA-Z0-9 _-]+)$/

Der obige reguläre Ausdruck erlaubt Leerzeichen neben einer Zeichenfolge und schränkt Sonderzeichen ein. Er erlaubt nur Az, AZ, 0-9, Leerzeichen, Unterstrich und Bindestrich.

Gayan Dissanayake
quelle
14
^\s*([0-9a-zA-Z]*)\s*$

oder, wenn Sie mindestens ein Zeichen möchten:

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

Eckige Klammern geben eine Reihe von Zeichen an. ^ ist der Beginn der Eingabe. $ ist das Ende der Eingabe (oder Newline, abhängig von Ihren Optionen). \ s ist Leerzeichen.

Das Leerzeichen davor und danach ist optional.

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

BEARBEITEN: Ich habe meine fehlerhafte Verwendung des Zeichensatzes \ w entfernt.

Cletus
quelle
6

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 alles 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 teste, ob die Zeichenfolge falsch ist und nicht, ob sie gültig ist.

Schalk
quelle
6

Das wird funktionieren

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

Es werden nur alphanumerische Zeichen akzeptiert:
Testfälle pased:

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 anderen Sonderzeichen

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

in eckigen 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

Referenz: Regulärer Ausdruck für alphanumerisch in Angularjs

Schädel
quelle
4

Erweitern Sie den String-Prototyp für Ihr gesamtes Projekt

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

Verwendung:

    "I don't know what to say?".alphaNumeric();
    //Idontknowwhattosay
Nicolas Giszpenc
quelle
3

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

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

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

  1. Erstellen Sie eine Kopie Ihrer Zeichenfolge in Großbuchstaben
  2. Machen 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 auch Zahlen erkennen, indem Sie nur nach den Ziffern 0 bis 9 suchen.

John Dorsey
quelle
2

Versuchen Sie dies ... Ersetzen Sie Ihre Feld-ID durch #name ... az (a bis z), AZ (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;
    });
});
Tanmay Patel
quelle
2

JAVASCRIPT akzeptiert nur NUMMERN, ALPHABETEN und SONDERZEICHEN

document.getElementById("onlynumbers").onkeypress = function (e) {
	onlyNumbers(e.key, e)
};

document.getElementById("onlyalpha").onkeypress = function (e) {
	onlyAlpha(e.key, e)
};

document.getElementById("speclchar").onkeypress = function (e) {
	speclChar(e.key, e)
};

function onlyNumbers(key, e) {
	var letters = /^[0-9]/g; //g means global
	if (!(key).match(letters)) e.preventDefault();
}

function onlyAlpha(key, e) {
	var letters = /^[a-z]/gi; //i means ignorecase
	if (!(key).match(letters)) e.preventDefault();
}

function speclChar(key, e) {
	var letters = /^[0-9a-z]/gi;
	if ((key).match(letters)) e.preventDefault();
}
<html>
   <head></head>
   <body>
      Enter Only Numbers: 
      <input id="onlynumbers" type="text">
      <br><br>
      Enter Only Alphabets: 
      <input id="onlyalpha" type="text" >
      <br><br>
      Enter other than Alphabets and numbers like special characters: 
      <input id="speclchar" type="text" >
   </body>
</html>

Pranav Bhat
quelle
1

Noch besser als Gayan Dissanayakedarauf hingewiesen.

/^[-\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 sich \ s um Leerzeichen und nicht nur um ein Leerzeichen kümmert.

Brian
quelle
1

Ich habe eine Zeichenfolge ähnlich Samsung Galaxy A10s 6,2-Zoll (2 GB, 32 GB ROM) Android 9.0, (13MP + 2MP) + 8MP Dual-SIM 4000mAh 4G LTE Smartphone - Schwarz (BF19)

Unten ist was ich getan habe:

string.replace(/[^a-zA-Z0-9 ,._-]/g, '').split(',').join('-').split(' ').join('-').toLowerCase()

Beachten Sie ließ ich ,._-dann verwenden split()und join()ersetzen ,zu -und Raum -sind.

Am Ende bekam ich so etwas: samsung-galaxy-a10s-6.2-inch-2gb-32gb-rom-android-9.0-13mp-2mp-8mp-dual-sim-4000mah-4g-lte-smartphone-black-bf19-20was ich wollte.

Es könnte eine bessere Lösung geben, aber ich fand, dass dies für mich gut funktioniert.

Harrison O.
quelle
0

Speichern Sie diese Konstante

const letters = /^[a-zA-Z0-9]+$/

Verwenden Sie jetzt zum Überprüfen des Teils .match ()

const string = 'Hey there...' // get string from a keyup listner
let id = ''
// iterate through each letters
for (var i = 0; i < string.length; i++) {
  if (string[i].match(letters) ) {
    id += string[i]
  } else {
    // In case you want to replace with something else
    id += '-'  
  }
}
return id
Abhin Krishna KA
quelle
-1

Bitte nur NUMMERN, ALPHABETEN und SONDERZEICHEN akzeptieren

<html>
<head>
<script src="https://cdnjs.cloudflare.com/ajax/libs/jquery/3.3.1/jquery.min.js"></script>
</head>

<body>
Enter Only Numbers: 
<input type="text" id="onlynumbers">
<br><br>
Enter Only Alphabets: 
<input type="text" id="onlyalpha">
<br><br>
Enter other than Alphabets and numbers like special characters: 
<input type="text" id="speclchar">

<script>
    $('#onlynumbers').keypress(function(e) {
      var letters=/^[0-9]/g; //g means global
      if(!(e.key).match(letters)) e.preventDefault();
	});
    
    $('#onlyalpha').keypress(function(e) {
      var letters=/^[a-z]/gi; //i means ignorecase
      if(!(e.key).match(letters)) e.preventDefault();
	});
    
    $('#speclchar').keypress(function(e) {
      var letters=/^[0-9a-z]/gi; 
      if((e.key).match(letters)) e.preventDefault();
	});
    </script>
</body>
</html>

**JQUERY to accept only NUMBERS , ALPHABETS and SPECIAL CHARACTERS **


<!DOCTYPE html>
    $('#onlynumbers').keypress(function(e) {
      var letters=/^[0-9]/g; //g means global
      if(!(e.key).match(letters)) e.preventDefault();
    });

    $('#onlyalpha').keypress(function(e) {
      var letters=/^[a-z]/gi; //i means ignorecase
      if(!(e.key).match(letters)) e.preventDefault();
    });

    $('#speclchar').keypress(function(e) {
      var letters=/^[0-9a-z]/gi; 
      if((e.key).match(letters)) e.preventDefault();
    });
<html>
<head>
<script src="https://ajax.googleapis.com/ajax/libs/jquery/3.4.1/jquery.min.js"> 

Nur Zahlen eingeben:

Nur Alphabete eingeben:

Geben Sie andere als Alphabete und Zahlen wie Sonderzeichen ein:

</body>
</html>
Pranav Bhat
quelle
1
jquery ist kein Javascript
rsm
Ja. Dank des obigen Codes funktioniert dies. Sie können dies überprüfen, indem Sie auf Code-Snippet ausführen klicken.
Pranav Bhat
JQuery ist eine Javascript-Bibliothek
Pranav Bhat
Wir können JQuery anstelle von Javascript verwenden, es wird einfach sein :)
Pranav Bhat
Ich bin traurig, dass du recht hattest. Ich habe einen anderen mit Javascript gepostet! Danke vielmals!
Pranav Bhat