30 votes

RegEx pour inclure les caractères alphanumériques et spéciaux

J'ai l'obligation d'autoriser les caractères alphanumériques et certains autres caractères pour un champ. J'utilise cette expression régulière :

 "^[a-zA-Z0-9!@#$&()-`.+,/\"]*$".

Les caractères spéciaux autorisés sont ! @ # $ & ( ) - ‘ . / + , “

Mais lorsque je teste le motif avec une chaîne "test_for_extended_alphanumeric", la chaîne passe le test. Je n'ai pas de "_" autorisés dans le modèle. Qu'est-ce que je fais de mal ?

45voto

Mark Byers Points 318575

Tu dois échapper au trait d'union :

"^[a-zA-Z0-9!@#$&()\\-`.+,/\"]*$"

Si vous ne l'échappez pas, cela signifie une série de caractères, comme par exemple a-z .

5voto

MikeM Points 5873

Dans votre classe de personnage, le )-' est interprété comme un intervalle de la même manière que par exemple a-z il se réfère donc à tout caractère dont le code ASCII décimal est compris entre 41 et 50. ) à 96 ' .

Depuis _ a le code 95, il est dans la fourchette et donc autorisé, comme le sont < , = , > etc.

Pour éviter cela, vous pouvez soit échapper au - c'est-à-dire \- ou mettre le - au début ou à la fin de la classe de caractères :

/^[a-zA-Z0-9!@#$&()`.+,/"-]*$/

Il n'est pas nécessaire d'échapper à la " et notez que, comme vous utilisez l'option * une chaîne vide passera également le test.

2voto

shubham Points 1

En utilisant cette regex, vous autorisez tous les caractères alphanumériques et spéciaux. Ici \w autorise tous les chiffres et \s permettant l'espace

[><?@+'`~^%&\*\[\]\{\}.!#|\\\"$';,:;=/\(\),\-\w\s+]*

Les caractères spéciaux autorisés sont ! @ # $ & ( ) - ‘ . / + , “ = { } [ ] ? / \ |

1voto

Explosion Pills Points 89756

Les traits d'union dans les classes de caractères indiquent une plage, sauf s'ils sont échappés ou s'ils se trouvent au début ou à la fin de la classe de caractères. Si vous souhaitez inclure des traits d'union, il est généralement préférable de les placer au début afin de ne pas avoir à vous soucier de l'échappement :

^[-a-zA-Z0-9!@#$&()`.+,/\"]*$

Au fait, _ se situe en effet entre ) et le backtick en ASCII :

http://en.wikipedia.org/wiki/ASCII#ASCII_printable_characters

0voto

Karthik Cherukuri Points 517

Que pensez-vous de ceci qui autorise les caractères spéciaux ainsi que les caractères alphanumériques ?

"[-~]*$"

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