c# Regex pour les chiffres et le tiret uniquement
J'ai de la suite dans mon code c# - ce que j'aime à faire est de vérifier pour voir si l'expression des nombres, ou un tiret, mais rien d'autre. Si je tape dans la lettre K avec un tiret ou un nombre toujours il l'accepte. Comment puis-je dire juste expresse être des nombres ou un tiret:
Match match = Regex.Match(input, @"[0-9-]");
Noter que l'entrée est le texte que je suis de passage pour l'évaluation.
- Votre expression signifie qu'il doit être un nombre ou un tiret quelque part dans la chaîne. Non pas qu'il ne peut contenir que ces personnages, et rien d'autre.
Vous devez vous connecter pour publier un commentaire.
La
^
signifie que le match devrait commencer au début de l'entrée, le$
qu'il devrait se terminer à la fin de l'entrée.La
*
signifie que (seulement) 0 ou plusieurs numéros ou des tirets devrait être là (utiliser+
au lieu de 1 ou plus).Match match = Regex.Match(input, @"^[0-9\-]$");
?[]
) est un littéral de tableau de bord, pas d'une plage de caractères.Votre Regex matchs que tout chiffres ou le tableau de bord existe au sein de la chaîne, essayez les solutions suivantes:
^
Début de chaîne[\d-]+
un ou plusieurs chiffres ou des tirets$
La fin de la chaîne^
et$
assurez-vous que je suis la vérification de l'ensemble de la chaîne, pas n'importe quelle partie de ce qui arrive à l'égaler.Une des opérations suivantes Regex ne fonctionne correctement.
si vous le souhaitez, vous devez être entre les chiffres
si vous souhaitez utiliser un seul - ou pas - entre les chiffres,
puis
Vous avez besoin pour échapper à la deuxième tiret.
Je vais vous avouer que je n'ai pas essayer, mais il devrait fonctionner.
Ce sera effectivement travailler uniquement avec un seul personnage. Si vous voulez prendre plus d'un caractère, comme "123-5", puis changer votre regex pour..
^
et$
dans votre modèle.Si c'est un tableau de chaînes, envisager de le faire avec LINQ?