RegEx para Javascript para permitir apenas alfanuméricos

237

Preciso encontrar um reg ex que permita apenas alfanumérico. Até agora, todo mundo que eu tento funciona apenas se a sequência for alfanumérica, ou seja, contém uma letra e um número. Eu só quero um que permita um e não exija os dois.

Do utilizador
fonte

Respostas:

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

Atualização (suportando caracteres universais)

se você precisar desse regexp, suporte a caracteres universais, poderá encontrar a lista de caracteres unicode aqui.

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

isso apoiará persa.

Greg
fonte
50
[az] não corresponde a caracteres internacionais.
Eric Normand
23
Uau - acho que nunca entendi completamente o regex até que ele fosse decomposto dessa maneira simples. Obrigado!
Matt Cashatt
Problema - sem / g, você acaba substituindo as correspondências antes de uma quebra de linha.
Volomike
5
outra maneira seria [^\W_]mas [a-z0-9]/ i é uma maneira óbvia.
Vimim.us
36
@ Greg, eu gosto de como você explica suas respostas relacionadas ao regex. Regexes sem explicações, na minha opinião, são meio inúteis. Como você recebe o "sim, funciona" e, de repente, quando você precisa alterá-lo, volta com um caso de uso diferente, em vez de realmente aprender o que o regex faz . Além disso, você é mais fácil de entender do que a documentação do regex: P
Chris Cirefice
147

Se você deseja retornar um resultado substituído, isso funcionaria:

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

Isso retornaria:

Test123TEST

Observe que o gi é necessário porque significa global (não apenas na primeira correspondência) e sem distinção entre maiúsculas e minúsculas, e é por isso que eu tenho az em vez de a-zA-Z. E o ^ dentro dos colchetes significa "qualquer coisa que não esteja entre colchetes".

AVISO: Alfanumérico é ótimo se é exatamente isso que você deseja. Mas se você estiver usando isso em um mercado internacional como o nome ou a área geográfica de uma pessoa, precisará considerar caracteres unicode, o que não será suficiente. Por exemplo, se você tiver um nome como "Âlvarö", seria "lvar".

Volomike
fonte
3
Esta é uma ótima resposta com a explicação. Lembre-se de permitir espaços, se precisar deles. .replace (/ [^ a-z0-9 \] / gi, '')
Joe Johnston
82

Use a palavra classe de caracteres. O seguinte é equivalente a ^[a-zA-Z0-9_]+$:

^\w+$

Explicação:

  • ^ início da string
  • \ w qualquer caractere de palavra (AZ, az, 0-9, _).
  • $ fim da string

Use /[^\w]|_/gse não desejar corresponder ao sublinhado.

Chase Seibert
fonte
20
\ w é realmente equivalente a [a-zA-Z_0-9], portanto seu RegEx também corresponde a sublinhados [_].
Martin Brown
quase alfanumérico não é alfanumérico em tudo, mas graças a seus ans me ajudou muito
ajax333221
É verdade que não é uma resposta estrita ao Q, como postado, mas exatamente o que eu estava procurando .. #
2880 protótipo
Desculpe, mas isso não corresponde a caracteres internacionais, como Ä
Alex Mi
muito ruim esta tirar os acentos
Miguel
38
/^([a-zA-Z0-9 _-]+)$/

o regex acima permite espaços ao lado de uma sequência e restringe caracteres especiais. Somente permite az, AZ, 0-9, Espaço, Sublinhado e traço.

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

ou, se você quiser no mínimo um caractere:

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

Colchetes indicam um conjunto de caracteres. ^ é o início da entrada. $ é o final da entrada (ou nova linha, dependendo de suas opções). \ s é um espaço em branco.

O espaço em branco antes e depois é opcional.

Os parênteses são o operador de agrupamento para permitir que você extraia as informações desejadas.

EDIT: removeu meu uso incorreto do conjunto de caracteres \ w.

cleto
fonte
6

Em vez de procurar uma sequência alfanumérica válida, você pode conseguir isso indiretamente, verificando se há caracteres inválidos na sequência. Faça isso verificando se há algo que corresponda ao complemento da sequência alfanumérica válida.

/[^a-z\d]/i    

Aqui está um exemplo:

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

Observe o operador não lógico em isValid, pois estou testando se a string é falsa, não se é válida.

Schalk
fonte
6

Isso vai funcionar

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

Ele aceita apenas caracteres alfanuméricos sozinho:
casos de teste corrigidos:

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

ou

Você também pode tentar este. esta expressão satisfez pelo menos um número e um caractere e nenhum outro caractere especial

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

em angular pode testar como:

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

DEMO PLUNKER

Referido: Expressão regular para alfanumérico em Angularjs

Crânio
fonte
4

Estenda o protótipo de cadeia para uso em todo o projeto

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

Uso:

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

Insira esse código no seu SCRATCHPAD e veja a ação.

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

Parece que muitos usuários notaram que essas expressões regulares quase certamente falharão, a menos que estejamos trabalhando estritamente em inglês. Mas acho que há um caminho fácil a seguir que não seria tão limitado.

  1. faça uma cópia da sua string em todas as MAIÚSCULAS
  2. faça uma segunda cópia em minúsculas

Quaisquer caracteres que correspondam a essas strings definitivamente não são de natureza 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, você também pode detectar números, procurando apenas os dígitos de 0 a 9.

John Dorsey
fonte
2

Tente isso ... Substitua o ID do campo por #name ... az (a a z), 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
fonte
2

JAVASCRIPT para aceitar apenas NÚMEROS, ALFABETOS e CARÁTERES ESPECIAIS

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

Ainda melhor do que o Gayan Dissanayakeindicado.

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

Agora ^[a-zA-Z0-9]+$pode ser representado como^\w+$

Você pode usar \ s em vez de espaço. Observe que \ s cuida do espaço em branco e não apenas de um caractere de espaço.

Brian
fonte
1

Tenho uma string semelhante ao Samsung Galaxy A10s de 6.2 polegadas (2GB, 32GB ROM) Android 9.0, (13MP + 2MP) + 8MP Dual SIM 4000mAh 4G LTE Smartphone - Preto (BF19)

Abaixo está o que eu fiz:

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

Observe eu permiti ,._-em seguida, usar split()e join()substituir ,a -e espaço para- , respectivamente.

Acabei recebendo algo parecido com isto: 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 eu queria.

Pode haver uma solução melhor, mas é isso que eu achei funcionando bem para mim.

Harrison O
fonte
0

Salve esta constante

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

agora, para verificar a parte, use .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
fonte
-1

Jquery para aceitar apenas NÚMEROS, ALFABETOS e CHARECTERS ESPECIAIS

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

Digite apenas números:

digite apenas alfabetos:

digite outros que não alfabetos e números como caracteres especiais:

</body>
</html>
Pranav Bhat
fonte
1
jquery não é javascript
rsm
Sim. Graças ao código acima, você pode verificar clicando em executar o snippet de código.
Pranav Bhat
jquery é uma biblioteca javascript
Pranav Bhat
podemos usar jQuery em vez de javascript será fácil :)
Pranav Bhat
Estou Sorrry, você estava certo .. Publiquei outro com javascript! Muito obrigado!
Pranav Bhat