J'ai le code suivant dans mon code c # - ce que j'aime faire, c'est vérifier si l'expression a des chiffres ou un tiret, mais rien d'autre. Si je tape la lettre K avec un tiret ou un chiffre, elle l’accepte quand même. Comment est-ce que je dis juste avoir le nombre exprès ou un tiret:
Match match = Regex.Match(input, @"[0-9-]");
Notez que la saisie est le texte que je passe pour l’évaluation.
Match match = Regex.Match(input, @"^[0-9-]*$");
Le ^
signifie que la correspondance doit commencer au début de l'entrée, le $
qu'il doit se terminer à la fin de l'entrée.
Le *
signifie que (seulement) 0 ou plusieurs chiffres ou tirets doivent être présents (utilisez +
à la place de 1 ou plus).
Votre regex correspond à ce que n'importe quel chiffre ou tiret existe dans la chaîne, essayez ceci:
Regex.Match(input, @"^[\d-]+$");
^
Début de chaîne
[\d-]+
un ou plusieurs chiffres ou tirets
$
fin de chaîne
N'importe lequel des regex suivants fonctionnera correctement.
[0-9\-]+ ( + one or more occurance)
[\d\-]+ (as \d represents numbers)
si vous voulez - doit être entre chiffres
[\d]+\-*[\d]+ will match any of following
90909900
9090-9009
900--900
si vous voulez utiliser un seul - ou aucun - entre les chiffres, puis
[\d]+\-?[\d]+ will match any of following
90909900 pass
9090-9009 pass
900--900 fail
Vous devez échapper au second tiret.
Match match = Regex.Match(input, @"[0-9\-]");
J'admets que je n'ai pas essayé, mais ça devrait marcher.
Cela ne fonctionnera réellement qu'avec un seul personnage. Si vous voulez qu'il prenne plus d'un caractère, comme "123-5", changez votre expression régulière en ..
Match match = Regex.Match(input, @"[0-9\-]+");
Si c'est un tableau de chaînes, envisagez de le faire avec LINQ?
if (arrInput.Any(s => (!Regex.IsMatch(s, @"^[\d-]+$")))){ //OK }