web-dev-qa-db-fra.com

RegEx pour Javascript pour permettre uniquement alphanumérique

J'ai besoin de trouver un ex-reg qui n'autorise que les alphanumériques. Jusqu'à présent, toutes les personnes que j'ai essayées ne fonctionnent que si la chaîne est alphanumérique, ce qui signifie à la fois une lettre et un chiffre. Je veux juste un qui permettrait l'un ou l'autre et n'exige pas les deux.

206
User
/^[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
440
Greg

Si vous voulez renvoyer un résultat remplacé, cela fonctionnera:

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

Cela retournerait:

Test123TEST

Notez que le gi est nécessaire car il signifie global (pas seulement lors du premier match), et insensible à la casse, ce qui explique pourquoi j'ai a-z au lieu de a-zA-Z. Et le ^ à l'intérieur des crochets signifie "tout ce qui n'est pas entre ces crochets".

ATTENTION: Alphanumeric est génial si c’est exactement ce que vous voulez. Mais si vous l'utilisez sur un marché international comme le nom ou la zone géographique d'une personne, vous devez alors prendre en compte les caractères Unicode, ce qui ne fonctionnera pas. Par exemple, si vous avez un nom comme "Âlvarö", cela le ferait "lvar".

136
Volomike

Utilisez la classe de caractères Word. Ce qui suit est équivalent à un ^[a-zA-Z0-9_]+$:

^\w+$

Explication:

  • ^ début de chaîne
  • \ w n’importe quel caractère Word (A à Z, a à z, 0 à 9, _).
  • $ fin de chaîne

Utilisez /[^\w]|_/g si vous ne voulez pas faire correspondre le trait de soulignement.

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

la regex ci-dessus autorise les espaces dans la chaîne et limite les caractères spéciaux.

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

ou, si vous voulez un minimum d'un caractère:

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

Les crochets indiquent un ensemble de caractères. ^ est le début de l'entrée. $ est la fin de la saisie (ou la nouvelle ligne, selon vos options).\s est un espace.

Les espaces avant et après sont facultatifs.

Les parenthèses sont l’opérateur de regroupement qui vous permet d’extraire les informations souhaitées.

EDIT: enlevé mon utilisation erronée du jeu de caractères\w.

12
cletus

Ça va marcher

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

Il accepte uniquement les caractères alphanumériques:
cas de tests ignorés:

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

ou

Vous pouvez aussi essayer celui-ci. cette expression satisfait au moins un chiffre et un caractère et aucun autre caractère spécial

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

dans angular peut tester comme:

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

DÉMO PLUNKER

Référence: expression régulière pour alphanumérique dans Angularjs

6
Skull

Au lieu de rechercher une chaîne alphanumérique valide, vous pouvez y parvenir indirectement en recherchant dans la chaîne les caractères non valides. Faites-le en recherchant tout ce qui correspond à complément de la chaîne alphanumérique valide.

/[^a-z\d]/i    

Voici un exemple:

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

Remarquez l'opérateur logique not en isValid, puisque je vérifie si la chaîne est fausse et non si elle est valide.

4
Schalk

Étendez le prototype de chaîne à utiliser tout au long de votre projet

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

Usage:

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

Il semble que de nombreux utilisateurs ont remarqué que ces expressions régulières vont presque certainement échouer, sauf si nous travaillons strictement en anglais. Mais je pense qu'il existe un moyen simple d'avancer qui ne serait pas si limité.

  1. faire une copie de votre chaîne dans tous les caractères majuscules
  2. faire une deuxième copie en minuscule

Tous les caractères qui correspondent dans ces chaînes ne sont certainement pas de nature alphabétique.

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

Facultativement, vous pouvez également détecter des valeurs numériques en recherchant simplement les chiffres de 0 à 9.

2
John Dorsey

Saisissez ce code sur votre SCRATCHPAD et voyez l’action.

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

Essayez ceci ... Remplacez votre ID de champ par # nom ... a-z (a à z), a-z (a à z), 0-9 (0 à 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
Tanmay Patel

Encore mieux que Gayan Dissanayake signalé.

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

Maintenant, ^[a-zA-Z0-9]+$ peut être représenté par ^\w+$

Vous voudrez peut-être utiliser \ s à la place de l'espace. Notez que \ s prend soin des espaces et non d’un seul caractère.

1
Brian