280 votes

RegEx pour Javascript afin de n'autoriser que les caractères alphanumériques.

Je dois trouver un ex reg qui n'autorise que les caractères alphanumériques. Jusqu'à présent, tous ceux que j'ai essayés ne fonctionnent que si la chaîne est alphanumérique, c'est-à-dire si elle contient à la fois une lettre et un chiffre. Je veux simplement en trouver un qui permette l'un ou l'autre, sans exiger les deux.

582voto

Greg Points 132247
/^[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

Mise à jour (support des caractères universels)

si vous avez besoin que cette regexp supporte le caractère universel vous pouvez trouver liste de caractères unicode ici.

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

cela supportera le persan.

54 votes

[a-z] ne correspond pas aux caractères internationaux.

27 votes

Wow - je ne pense pas avoir jamais bien compris les regex jusqu'à ce qu'ils soient décomposés de manière aussi simple. Merci !

0 votes

Problème - sans /g, vous ne remplacez que les correspondances avant un saut de ligne.

175voto

Volomike Points 7083

Si vous vouliez renvoyer un résultat remplacé, cela fonctionnerait :

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

Cela reviendrait :

Test123TEST

Notez que le gi est nécessaire parce qu'il signifie global (pas seulement sur la première correspondance), et insensible à la casse, ce qui explique pourquoi j'ai a-z au lieu de a-zA-Z. Et le ^ entre les crochets signifie "tout ce qui n'est pas entre ces crochets".

AVERTISSEMENT : Alphanumérique est très bien si c'est exactement ce que vous voulez. Mais si vous l'utilisez sur un marché international, par exemple pour le nom d'une personne ou d'une zone géographique, vous devez tenir compte des caractères unicode, ce qui n'est pas le cas. Par exemple, si vous avez un nom comme "Âlvarö", cela donnera "lvar".

3 votes

C'est une excellente réponse avec l'explication. N'oubliez pas de prévoir des espaces si vous en avez besoin. .replace(/[^a-z0-9\ ]/gi,'')

98voto

Chase Seibert Points 7609

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

^\w+$

Explication :

  • ^ début de la chaîne
  • \w tout caractère de mot (A-Z, a-z, 0-9, _).
  • $ fin de la chaîne

Utilisez /[^\w]|_/g si vous ne voulez pas faire correspondre l'underscore.

21 votes

\w est en fait équivalent à [a-zA-Z_0-9], de sorte que votre RegEx correspond également aux caractères de soulignement [_].

0 votes

Presque alphanumérique n'est pas alphanumérique du tout, mais merci vos réponses m'ont beaucoup aidé.

0 votes

C'est vrai, ce n'est pas une réponse stricte à la question posée, mais c'est exactement ce que je cherchais

42voto

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

la regex ci-dessus autorise les espaces dans une chaîne de caractères et limite les caractères spéciaux. a-z, A-Z, 0-9, espace, underscore et tiret.

16voto

cletus Points 276888
^\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 l'entrée (ou une nouvelle ligne, selon vos options). \s est un espace blanc.

L'espace blanc avant et après est facultatif.

Les parenthèses sont l'opérateur de regroupement qui vous permet d'extraire les informations que vous souhaitez.

EDIT : suppression de mon utilisation erronée de l'expression \w le jeu de caractères.

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X