RegEx para Javascript para permitir solo alfanuméricos

237

Necesito encontrar un registro ex que solo permita caracteres alfanuméricos. Hasta ahora, todos los que trato solo funcionan si la cadena es alfanumérica, lo que significa que contiene tanto una letra como un número. Solo quiero uno que permita cualquiera y no requiera ambos.

Usuario
fuente

Respuestas:

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

Actualización (compatible con caracteres universales)

si necesita que esta expresión regular admita caracteres universales, puede encontrar una lista de caracteres unicode aquí.

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

esto apoyará persa.

Greg
fuente
50
[az] no coincide con los caracteres internacionales.
Eric Normand
23
Wow: no creo haber entendido completamente la expresión regular hasta que se desglosó de esta manera simple. ¡Gracias!
Matt Cashatt 01 de
Problema: sin / g, solo terminas reemplazando las coincidencias antes de un ajuste de línea.
Volomike
55
otra forma sería [^\W_]pero [a-z0-9]/ i es una forma obvia.
Vitim.us
36
@ Greg, disfruto cómo explicas tus respuestas relacionadas con expresiones regulares. Las expresiones regulares sin explicaciones, en mi opinión, son algo inútiles. Porque se tiene que una sola vez "sí funciona" y de repente, cuando es necesario cambiarlo vuelvas derecha con un caso de uso diferente, en lugar de realmente aprender lo que la expresión regular hace . Además, es más fácil de entender que la documentación de
expresiones
147

Si desea devolver un resultado reemplazado, esto funcionaría:

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

Esto devolvería:

Test123TEST

Tenga en cuenta que el gi es necesario porque significa global (no solo en la primera coincidencia) y no distingue entre mayúsculas y minúsculas, por lo que tengo az en lugar de a-zA-Z. Y el ^ dentro de los corchetes significa "cualquier cosa que no esté entre estos corchetes".

ADVERTENCIA: Alfanumérico es genial si eso es exactamente lo que quieres. Pero si está usando esto en un mercado internacional como el nombre de una persona o área geográfica, entonces debe tener en cuenta los caracteres Unicode, lo cual no será suficiente. Por ejemplo, si tiene un nombre como "Âlvarö", lo haría "lvar".

Volomike
fuente
3
Esta es una gran respuesta con la explicación. Recuerde permitir espacios si los necesita. .replace (/ [^ a-z0-9 \] / gi, '')
Joe Johnston
82

Usa la palabra clase de caracteres. Lo siguiente es equivalente a a ^[a-zA-Z0-9_]+$:

^\w+$

Explicación:

  • ^ inicio de cadena
  • \ w cualquier carácter de palabra (AZ, az, 0-9, _).
  • $ final de cadena

Úselo /[^\w]|_/gsi no desea hacer coincidir el guión bajo.

Chase Seibert
fuente
21
\ w es en realidad equivalente a [a-zA-Z_0-9] por lo que su RegEx también coincide con los guiones bajos [_].
Martin Brown
casi alfanumérico no es alfanumérico en absoluto, pero gracias a ustedes y ustedes me ayudaron mucho
ajax333221
Es cierto, no es una respuesta estricta a la Q publicada, pero exactamente lo que estaba buscando ...
prototipo
Lo sentimos, pero esto no coincide con los caracteres internacionales, como Ä
Alex Mi
Lástima que esto elimine mis acentos
Miguel
38
/^([a-zA-Z0-9 _-]+)$/

la expresión regular anterior permite espacios en el lado de una cadena y restringe caracteres especiales. Solo permite az, AZ, 0-9, Espacio, subrayado y guión.

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

o, si quieres un mínimo de un personaje:

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

Los corchetes indican un conjunto de caracteres. ^ es el inicio de la entrada. $ es el final de la entrada (o nueva línea, según sus opciones). \ s es espacio en blanco.

El espacio en blanco antes y después es opcional.

Los paréntesis son el operador de agrupación que le permite extraer la información que desea.

EDITAR: eliminó mi uso erróneo del conjunto de caracteres \ w.

cletus
fuente
6

En lugar de buscar una cadena alfanumérica válida, puede lograr esto indirectamente al verificar la cadena para ver si hay caracteres no válidos. Para ello, verifique cualquier cosa que coincida con el complemento de la cadena alfanumérica válida.

/[^a-z\d]/i    

Aquí hay un ejemplo:

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

Observe el operador lógico no en isValid, ya que estoy probando si la cadena es falsa, no si es válida.

Schalk
fuente
6

Esto funcionará

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

Solo acepta caracteres alfanuméricos:
casos de prueba pasados:

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

o

También puedes probar este. esta expresión satisfizo al menos un número y un carácter y ningún otro carácter especial

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

en angular puede probar como:

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

DEMO DE PLUNKER

Referencia: expresión regular para alfanuméricos en Angularjs

Cráneo
fuente
4

Extienda el prototipo de cadena para usar en todo su proyecto

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

Uso:

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

Ingrese este código en su SCRATCHPAD y vea la acción.

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

Parece que muchos usuarios han notado que estas expresiones regulares fallarán casi con seguridad a menos que estemos trabajando estrictamente en inglés. Pero creo que hay un camino fácil que no sería tan limitado.

  1. haz una copia de tu cadena en MAYÚSCULAS
  2. hacer una segunda copia en minúsculas

Los caracteres que coinciden en esas cadenas definitivamente no son de naturaleza alfabética.

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

Opcionalmente, también puede detectar números simplemente buscando dígitos del 0 al 9.

John Dorsey
fuente
2

Pruebe esto ... Reemplace su ID de campo con #nombre ... az (aaz), AZ (A a Z), 0-9 (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;
    });
});
Tanmay Patel
fuente
2

JAVASCRIPT acepta solo NÚMEROS, ALFABETOS y CARACTERES ESPECIALES

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
fuente
1

Incluso mejor de lo Gayan Dissanayakeseñalado.

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

Ahora ^[a-zA-Z0-9]+$se puede representar como^\w+$

Es posible que desee utilizar \ s en lugar de espacio. Tenga en cuenta que \ s se ocupa del espacio en blanco y no solo de un carácter de espacio.

Brian
fuente
1

Tengo una cadena similar al Samsung Galaxy A10s 6.2 pulgadas (2GB, 32GB ROM) Android 9.0, (13MP + 2MP) + 8MP Dual SIM 4000mAh 4G LTE Smartphone - Negro (BF19)

A continuación es lo que hice:

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

Aviso que permití ,._-luego usar split()y join()reemplazar ,a- y el espacio para -respectivamente.

Terminé obteniendo algo como esto: samsung-galaxy-a10s-6.2-inch-2gb-32gb-rom-android-9.0-13mp-2mp-8mp-dual-sim-4000mah-4g-lte-smartphone-black-bf19-20 que es lo que quería.

Puede haber una mejor solución, pero esto es lo que encontré funcionando bien para mí.

Harrison O
fuente
0

Guarda esta constante

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

ahora, para verificar el uso de la parte .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
fuente
-1

Jquery acepta solo NÚMEROS, ALFABETOS y CARACTERES ESPECIALES

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

Ingrese solo números:

Ingrese solo alfabetos:

ingrese otros que no sean alfabetos y números como caracteres especiales:

</body>
</html>
Pranav Bhat
fuente
1
jquery no es javascript
rsm
Si. Gracias, el código anterior está funcionando, puede verificarlo haciendo clic en Ejecutar fragmento de código.
Pranav Bhat
jquery es una biblioteca javascript
Pranav Bhat
podemos usar jQuery en lugar de Javascript que será fácil :)
Pranav Bhat
Soy Sorrry, tenías razón ... ¡He publicado otro con javascript! ¡Gracias una tonelada!
Pranav Bhat