web-dev-qa-db-fra.com

Inclure un tiret dans une parenthèse regex?

$.validator.addMethod('AZ09_', function (value) { 
    return /^[a-zA-Z0-9.-_]+$/.test(value); 
}, 'Only letters, numbers, and _-. are allowed');

Lorsque j'utilise quelque chose comme test-123, Il se déclenche toujours comme si le trait d'union n'était pas valide. J'ai essayé \- Et --

53
ParoX

Échapper à l'aide de \- devrait être correct, mais vous pouvez également essayer de le placer au début ou à la fin de la classe de caractères. Cela devrait fonctionner pour vous:

/^[a-zA-Z0-9._-]+$/
85
Mark Byers

Échapper le tiret à l'aide de \- est la bonne façon.

J'ai vérifié que l'expression /^[a-zA-Z0-9.\-_]+$/ autorise les tirets. Vous pouvez également utiliser le \w classe pour le raccourcir en /^[\w.\-]+$/.

(Le fait de placer le trait d'union en dernier dans l'expression fait qu'il ne nécessite pas d'échappement, car il ne peut alors pas faire partie d'une plage, mais vous voudrez peut-être toujours prendre l'habitude de toujours l'échapper.)

26
Guffa

\- devrait fonctionner pour échapper au - dans la plage de caractères. Pouvez-vous citer ce que vous avez testé alors que cela ne semble pas? Parce que cela semble fonctionner: http://jsbin.com/odita

2
T.J. Crowder

Le\- peut-être ne fonctionnait pas parce que vous avez passé tout le truc du serveur avec une chaîne. Si tel est le cas, vous devez d'abord échapper le\afin que le programme côté serveur puisse également le gérer.

  • Dans une chaîne côté serveur: \\ -
  • Côté client:\-
  • En regex (couvertures): -

Ou vous pouvez simplement mettre à la et des crochets [].

0

Une façon plus générique de faire correspondre les tirets est d'utiliser la classe de caractères pour les tirets et les tirets ("\ p {Pd}" sans guillemets). Si vous avez affaire à du texte provenant de diverses cultures et sources, vous constaterez peut-être qu'il existe plus de types de tirets, pas seulement un caractère. Vous pouvez ajouter cela à l'intérieur de l'expression []

0
Radu Simionescu