2012-05-16 3 views

Répondre

10

Le regex suivant devrait être ce que vous recherchez (explication ci-dessous):

\A[-\w.]*\z 

La classe de caractères suivante devrait correspondre uniquement les caractères que vous souhaitez autoriser:

[-a-zA-z0-9_.] 

Vous pouvez raccourcir ce qui suit depuis \w est équivalent à [a-zA-z0-9_]:

[-\w.] 

Notez que pour inclure une - littérale dans votre classe de personnage, il doit être le premier caractère car sinon il sera interprété comme une plage (par exemple [a-d] est équivalent à [abcd]). L'autre option est de l'échapper avec un antislash.

Normalement, . signifie n'importe quel caractère à l'exception des retours à la ligne, et vous devez lui échapper pour correspondre à une période littérale, mais cela n'est pas nécessaire à l'intérieur des classes de caractères.

Le \A et \z sont ancres au début et à la fin de la chaîne, sinon vous correspondre à des chaînes qui contiennent les caractères autorisés, au lieu de chaînes qui contiennent seulement les caractères autorisés.

Le * signifie zéro ou plusieurs caractères, si vous le voulez exiger un ou plusieurs caractères changent la * à un +.

+0

F.J: merci! – user984621

+0

J'aime votre explication, mais cela ne fonctionne pas pour moi.La réponse de @ seamus-abshere fonctionne très bien. – monteirobrena

+0

Comment cela fonctionnera-t-il sur javascript? – Louie

4

/\A[\w\-\.]+\z/

  • \w signifie alphanumérique (insensible à la casse) et "_"
  • \- signifie tableau de bord
  • \. signifie période
  • \A moyens de début (même "plus fort" que ^)
  • \z signifie fin (même "plus fort" que $)

par exemple:

>> 'a-zA-z0-9._' =~ /\A[\w\-\.]+\z/ 
=> 0 # this means a match 

MISE À JOUR grâce phrogz pour l'amélioration

+0

Vous voudrez peut-être envelopper ceci dans '/ \ A ... \ z /' pour que l'OP puisse s'assurer qu'une chaîne invalide avec une sous-chaîne valide ne correspond pas. De même, 'i' est inutile lorsque vous utilisez' \ w'. – Phrogz

+0

Seamus: merci! – user984621

Questions connexes