web-dev-qa-db-fra.com

Alphanumérique, tiret et souligné, mais pas d'espaces expression régulière check JavaScript

Essayer de comparer une entrée à une expression régulière.

Le champ doit uniquement autoriser les caractères alphanumériques, les tirets et les traits de soulignement et NE PAS autoriser les espaces.

Cependant, le code ci-dessous autorise les espaces.

Qu'est-ce que je rate?

var regexp = /^[a-zA-Z0-9\-\_]$/;
var check = "checkme";
if (check.search(regexp) == -1)
    { alert('invalid'); }
else
    { alert('valid'); }
75
Tom

Cependant, le code ci-dessous autorise les espaces.

Non, ça ne va pas. Cependant, elle ne correspond qu'aux entrées de longueur 1. Pour les entrées de longueur supérieure ou égale à 1, vous avez besoin d'un + suivant la classe de personnage:

var regexp = /^[a-zA-Z0-9-_]+$/;
var check = "checkme";
if (check.search(regexp) == -1)
    { alert('invalid'); }
else
    { alert('valid'); }

Notez que ni le - (dans ce cas) ni le _ besoin de s'échapper.

124
Andy E

Vous devriez n'utilisez pas String.match mais RegExp.prototype.test (c'est-à-dire /abc/.test("abcd")) au lieu de String.search () si vous ne vous intéressez qu'à une valeur booléenne. Vous devez également répéter votre classe de personnage, comme expliqué dans la réponse de Andy E:

var regexp = /^[a-zA-Z0-9-_]+$/;
14
sapht

Vous avez une erreur stupide. Alors postez ici, si quelqu'un le trouve utile

  1. -\._ - signifie trait d'union, point et trait de soulignement
  2. \.-_ - signifie que tous les signes sont compris entre le point et le trait de soulignement
3
Ivan Ivanov

Cette syntaxe est un peu plus concise que les réponses postées à ce jour et aboutit au même résultat:

let regex = /^[\w-]+$/;
2
Grant Humphries

Ne pas échapper au trait de soulignement. Peut-être causer un whackness.

1
David Fells

Essaye ça

"[A-Za-z0-9_-]+"

Devrait permettre les traits de soulignement et les traits d'union

0
Akash Yellappa