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.
/^[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
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".
Utilisez la classe de caractères Word. Ce qui suit est équivalent à un ^[a-zA-Z0-9_]+$
:
^\w+$
Explication:
Utilisez /[^\w]|_/g
si vous ne voulez pas faire correspondre le trait de soulignement.
/^([a-zA-Z0-9 _-]+)$/
la regex ci-dessus autorise les espaces dans la chaîne et limite les caractères spéciaux.
^\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.
Ç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);
Référence: expression régulière pour alphanumérique dans Angularjs
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.
É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
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é.
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.
Saisissez ce code sur votre SCRATCHPAD et voyez l’action.
var str=String("Blah-Blah1_2,oo0.01&zz%kick").replace(/[^\w-]/ig, '');
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;
});
});
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.