RegEx per Javascript per consentire solo caratteri alfanumerici

Ho bisogno di trovare un reg ex che consente solo alfanumerico. Finora, tutti quelli che cerco funzionano solo se la stringa è alfanumerica, ovvero contiene sia una lettera che un numero. Ne voglio solo uno che consenta entrambi e non richiede entrambi.

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

Se volessi restituire un risultato sostituito, allora funzionerebbe:

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

Ciò restituirebbe:

 Test123TEST 

Si noti che il gi è necessario perché significa globale (non solo alla 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 “qualsiasi cosa non in queste parentesi”.

ATTENZIONE: l’alfanumerico è ottimo se è esattamente ciò che desideri. Ma se stai usando questo in un mercato internazionale come il nome di una persona o l’area geografica, allora devi rendere conto di caratteri unicode, cosa che questo non farà. Ad esempio, se hai un nome come “Âlvarö”, lo renderebbe “lvar”.

Usa la parola class del personaggio. Quanto segue è equivalente a ^[a-zA-Z0-9_]+$ :

 ^\w+$ 

Spiegazione:

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

Usa /[^\w]|_/g se non vuoi abbinare il carattere di sottolineatura.

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

la regex precedente consente di inserire spazi in una stringa e limitare i caratteri speciali. Consente solo az, AZ, 0-9, spazio, trattino basso e trattino.

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

o, se vuoi un minimo di un carattere:

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

Le parentesi quadre indicano un insieme 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 all’utente di estrarre le informazioni desiderate.

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

Questo funzionerà

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

Accetta solo i caratteri alfanumerici:
casi di prova passati:

 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 angular 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 PLUNKER

Riferito: espressione regolare per alfanumerico in Angularjs

Estendi il prototipo di stringa da utilizzare nel tuo progetto

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

Uso:

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

Invece di cercare una stringa alfanumerica valida, è ansible ottenerla indirettamente controllando la stringa per qualsiasi carattere non valido. Fatelo controllando tutto ciò che corrisponde al complemento della stringa alfanumerica valida.

 /[^az\d]/i 

Ecco un esempio:

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

Si noti che l’operatore logico non è isValid , poiché sto verificando se la stringa è falsa, non se è valida.

Sembra che molti utenti abbiano notato che queste espressioni regolari quasi certamente falliranno a meno che non lavoriamo rigorosamente in inglese. Ma penso che ci sia un modo semplice di procedere che non sarebbe così limitato.

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

Tutti i personaggi che corrispondono a quelle stringhe non sono assolutamente di natura alfabetica.

 let copy1 = originalString.toUpperCase(); let copy2 = originalString.toLowerCase(); for(let i=0; i 

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

Anche meglio di Gayan Dissanayake ha sottolineato.

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

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

Potresti voler usare \ s invece di spazio. Nota che \ s si prende cura dello spazio bianco e non solo di uno spazio.

Prova questo … Sostituisci l’ID campo con #name … az (da a a z), AZ (da A a 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; }); }); 

Inserisci questi codici sul tuo SCRATCHPAD e vedi l’azione.

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