web-dev-qa-db-fra.com

Regex pour permettre alphanumeric, -, _ et espace

Je recherche une expression régulière autorisant les caractères alphanumériques, -, _ ou les espaces dans JavaScript/jQuery. J'ai essayé Google mais je n'ai pas réussi à le trouver.

Quelqu'un peut-il m'aider avec cela?

Merci d'avance.

27
rahul

Essayez cette regex:

/^[a-z\d\-_\s]+$/i
38
elclanrs

Jeux de caractères aidera une tonne ici. Vous souhaitez créer un jeu de correspondance pour les caractères que vous souhaitez valider:

  • Vous pouvez associer des caractères alphanumériques à un \w, identique à [A-Za-z0-9_] en JavaScript (d'autres langues peuvent être différentes).
  • Cela laisse - et des espaces, qui peuvent être combinés dans un ensemble correspondant tel que [\w\- ]. Cependant, vous voudrez peut-être envisager d'utiliser \s au lieu du simple caractère d'espace (\s correspond également aux tabulations et autres formes d'espaces)
    • Notez que j'échappe - en tant que \- afin que le moteur des expressions rationnelles ne le confonde pas avec une plage de caractères telle que A-Z
  • En dernier lieu, vous voulez probablement vous assurer que la chaîne entière correspond à en ancrant le début et la fin via ^ et $

La regex complète que vous recherchez probablement est:

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

(Notez que le + indique qu'il doit y avoir au moins un caractère pour qu'il corresponde; utilisez plutôt un *, si une chaîne de longueur nulle est également correcte)

Enfin, http://www.regular-expressions.info/ est une référence impressionnante


Points bonus: Cette expression rationnelle ne correspond pas correspond aux alphas non ASCII. Malheureusement, le moteur de regex de la plupart des navigateurs ne prend pas en charge les jeux de caractères nommés, mais il existe certaines bibliothèques pour vous aider avec cela .

Pour les langues/plates-formes prenant en charge les jeux de caractères nommés, vous pouvez utiliser /^[\p{Letter}\d\_\-\s]+$/.

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

\w correspond à lettres, chiffres et underscores

\s correspond à spaces, tabs et sauts de ligne

- correspond au trait d'union (si vous avez un tiret dans votre exemple de jeu de caractères [a-z], assurez-vous de placer le trait d'union au début, comme suit [-a-z])

9
cbayram
var string = 'test- _ 0Test';
string.match(/^[-_ a-zA-Z0-9]+$/)
6
nkamm
var regex = new RegExp("^[A-Za-z0-9? ,_-]+$");
            var key = String.fromCharCode(event.charCode ? event.which : event.charCode);
            if (!regex.test(key)) {
                event.preventDefault();
                return false;
            }

dans regExp [A-Za-z0-9?spaceHere,_-], il y a un espace littéral après le point d'interrogation '?'. Cela correspond à l'espace. D'autres comme /^[-\w\s]+$/ et /^[a-z\d\-_\s]+$/i ne travaillaient pas pour moi.

2
Asif Khan

Pour moi, je voulais une regex qui supporte les chaînes précédentes. Fondamentalement, le motif est de supporter le format postal de certains pays étrangers car il devrait être un format alphanumérique avec des espaces autorisés. 

  1. ABC123
  2. ABC 123
  3. ABC123 (espace)
  4. ABC 123 (espace)

J'ai donc fini par écrire un regex personnalisé comme ci-dessous.

/^([a-z]+[\s]*[0-9]+[\s]*)+$/i

 enter image description here

Ici, j'ai donné * dans [\s]* car il n'est pas obligatoire d'avoir un espace. Un code postal peut contenir ou non un espace dans mon cas. 

0
Sibeesh Venu