RegEx per Javascript per consentire solo alfanumerico


237

Devo trovare un reg ex che consenta solo caratteri alfanumerici. Finora, tutti quelli che provo funzionano solo se la stringa è alfanumerica, il che significa sia una lettera che un numero. Ne voglio solo uno che consenta uno dei due e non richieda entrambi.

Risposte:


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

Aggiornamento (supporto di caratteri universali)

se hai bisogno di questo regexp supporta il carattere universale puoi trovare un elenco di caratteri Unicode qui.

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

questo supporterà il persiano.


50
[az] non corrisponde ai caratteri internazionali.
Eric Normand,

23
Wow - Non credo di aver mai compreso a fondo la regex fino a quando non è stata scomposta in questo modo semplice. Grazie!
Matt Cashatt,

Problema: senza / g, si finisce per sostituire le partite solo prima di un avvolgimento di riga.
Volomike,

5
un altro modo sarebbe [^\W_]ma [a-z0-9]/ i è un modo ovvio.
Vitim.us

36
@Greg, mi piace come spieghi le tue risposte relative alla regex. I regexes senza spiegazioni, secondo me, sono in qualche modo inutili. Perché si ottiene che una volta "sì funziona" e improvvisamente, quando hai bisogno di cambiare si torna a destra con un diverso caso d'uso, in realtà invece di imparare ciò che la regex fa . Inoltre, sei più facile da capire della documentazione regex: P
Chris Cirefice,

147

Se si desidera restituire un risultato sostituito, funzionerebbe:

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

Ciò restituirebbe:

Test123TEST

Nota che il gi è necessario perché significa globale (non solo sulla prima corrispondenza) e senza distinzione tra maiuscole e minuscole, motivo per cui ho az invece di a-zA-Z. E il ^ all'interno delle parentesi significa "tutto ciò che non è tra queste parentesi".

ATTENZIONE: Alfanumerico è ottimo se è esattamente quello che vuoi. Ma se lo stai utilizzando in un mercato internazionale come il nome o l'area geografica di una persona, devi tenere conto dei caratteri unicode, cosa che non funzionerà. Ad esempio, se hai un nome come "Âlvarö", lo renderebbe "lvar".


3
Questa è un'ottima risposta con la spiegazione. Ricorda di consentire gli spazi se ne hai bisogno. .replace (/ [^ a-z0-9 \] / gi, '')
Joe Johnston,

82

Usa la classe di caratteri della parola. Quanto segue equivale a ^[a-zA-Z0-9_]+$:

^\w+$

Spiegazione:

  • ^ inizio della stringa
  • \ w qualsiasi carattere di parola (AZ, az, 0-9, _).
  • $ fine della stringa

Utilizzare /[^\w]|_/gse non si desidera abbinare il carattere di sottolineatura.


21
\ w è effettivamente equivalente a [a-zA-Z_0-9], quindi RegEx corrisponde anche ai trattini bassi [_].
Martin Brown,

quasi alfanumerico non è affatto alfanumerico, ma grazie il tuo ans mi ha aiutato molto
ajax333221

Vero, non una risposta rigorosa alla Q come pubblicata, ma esattamente quello che stavo cercando ..
prototipo

Siamo spiacenti, ma questo non corrisponde ai personaggi internazionali, come Ä
Alex Mi

peccato che questo rimuova i miei accenti
Miguel,

38
/^([a-zA-Z0-9 _-]+)$/

la regex di cui sopra consente gli spazi a lato di una stringa e limita i caratteri speciali. Consente solo az, AZ, 0-9, spazio, trattino basso e trattino.


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

oppure, se si desidera un minimo di un personaggio:

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

Le parentesi quadre indicano un set di caratteri. ^ è l'inizio dell'input. $ è la fine dell'input (o newline, a seconda delle opzioni). \ s è uno spazio bianco.

Lo spazio bianco prima e dopo è facoltativo.

Le parentesi sono l'operatore di raggruppamento per consentire di estrarre le informazioni desiderate.

EDIT: rimosso il mio uso errato del set di caratteri \ w.


6

Invece di cercare una stringa alfanumerica valida, puoi ottenerla indirettamente controllando la presenza di caratteri non validi nella stringa. Fallo verificando tutto ciò che corrisponde al complemento della stringa alfanumerica valida.

/[^a-z\d]/i    

Ecco un esempio:

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

Nota l'operatore logico non isValid, poiché sto testando se la stringa è falsa, non se è valida.


6

Questo funzionerà

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

Accetta solo caratteri alfanumerici: solo
casi testati:

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

o

Puoi anche provare questo. questa espressione ha soddisfatto almeno un numero e un carattere e nessun altro carattere speciale

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

in angolare può testare come:

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

DEMO DI PLUNKER

Riferito: espressione regolare per alfanumerico in Angularjs


4

Estendi il prototipo di stringa da utilizzare in tutto il tuo progetto

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

Uso:

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

3

Inserisci questo codice sul tuo SCRATCHPAD e guarda l'azione.

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

2

Sembra che molti utenti abbiano notato che queste espressioni regolari falliranno quasi sicuramente a meno che non lavoriamo strettamente in inglese. Ma penso che ci sia un modo semplice per andare avanti che non sarebbe così limitato.

  1. crea una copia della tua stringa in MAIUSCOLO
  2. crea una seconda copia in minuscolo

Qualsiasi personaggio che corrisponda a quelle stringhe non è sicuramente di natura alfabetica.

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

Facoltativamente, puoi anche rilevare i numeri semplicemente cercando le cifre da 0 a 9.


2

Prova questo ... Sostituisci il tuo ID campo con #name ... az (dalla A alla Z), AZ (dalla A alla Z), 0-9 (da 0 a 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

JAVASCRIPT accetta solo NUMERI, ALFABETTI e PERSONAGGI SPECIALI

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>


1

Ancora meglio di quanto Gayan Dissanayakeindicato.

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

Ora ^[a-zA-Z0-9]+$può essere rappresentato come^\w+$

Potresti voler usare \ s invece di spazio. Nota che \ s si occupa dello spazio bianco e non di un solo carattere spazio.


1

Ho una stringa simile a Samsung Galaxy A10s 6.2-Inch (2GB, 32GB ROM) Android 9.0, (13MP + 2MP) + 8MP Dual SIM 4000mAh 4G LTE Smartphone - Nero (BF19)

Di seguito è quello che ho fatto:

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

Notate mi ha permesso ,._-quindi utilizzare split()e join()per sostituire ,a -e lo spazio per- , rispettivamente.

Ho finito per ottenere qualcosa del genere: samsung-galaxy-a10s-6.2-inch-2gb-32gb-rom-android-9.0-13mp-2mp-8mp-dual-sim-4000mah-4g-lte-smartphone-black-bf19-20 che è quello che volevo.

Potrebbe esserci una soluzione migliore, ma questo è ciò che ho trovato che funziona bene per me.


0

Salva questa costante

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

ora, per controllare la parte usa .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

-1

Jquery accetta solo NUMERI, ALFABETTI e PERSONAGGI SPECIALI

<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"> 

Inserisci solo numeri:

inserisci solo alfabeti:

inserisci diversi alfabeti e numeri come caratteri speciali:

</body>
</html>

1
jquery non è javascript
rsm il

Si. Grazie al codice sopra funziona, puoi controllare facendo clic su esegui snippet di codice.
Pranav Bhat,

jquery è una libreria javascript
Pranav Bhat,

possiamo usare jquery invece di javascript sarà facile :)
Pranav Bhat,

Sono Sorrry avevi ragione .. ne ho pubblicato un altro con javascript! Grazie mille!
Pranav Bhat,
Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.