Je n'ai pas du tout utilisé d'expressions régulières, j'ai donc du mal à résoudre les problèmes. Je veux que l'expression régulière corresponde uniquement lorsque la chaîne contenue est composée de tous les nombres; mais avec les deux exemples ci-dessous, cela correspond à une chaîne qui contient tous les nombres plus un signe égal comme "1234 = 4321". Je suis sûr qu'il y a moyen de changer ce comportement, mais comme je l'ai dit, je n'ai jamais vraiment fait grand chose avec les expressions régulières.
string compare = "1234=4321";
Regex regex = new Regex(@"[\d]");
if (regex.IsMatch(compare))
{
//true
}
regex = new Regex("[0-9]");
if (regex.IsMatch(compare))
{
//true
}
Au cas où cela importerait, j'utilise C # et .NET2.0.
Utilisez les ancres de début et de fin.
Regex regex = new Regex(@"^\d$");
Utilisez "^\d+$"
si vous devez faire correspondre plusieurs chiffres.
Notez que "\d"
correspondra à [0-9]
et à d'autres caractères numériques tels que les chiffres de l'arabe orientale ٠١٢٣٤٥٦٧٨٩
. Utilisez "^[0-9]+$"
pour limiter les correspondances aux seuls chiffres arabes 0 à 9.
Si vous devez inclure des représentations numériques autres que des chiffres (comme des valeurs décimales pour les débutants), consultez @ tchrist 's guide complet pour l'analyse de nombres avec des expressions régulières .
Votre regex correspondra à tout ce qui contient un nombre, vous voulez utiliser des ancres pour faire correspondre toute la chaîne, puis un ou plusieurs nombres:
regex = new Regex("^[0-9]+$");
Le ^
ancrera le début de la chaîne, le $
ancrera la fin de la chaîne et le +
correspondra à un ou plusieurs de ce qui le précède (un numéro dans ce cas ).
Si vous devez tolérer le point décimal et le marqueur de milliers
var regex = new Regex(@"^-?[0-9][0-9,\.]+$");
Vous aurez besoin d'un "-" si le nombre peut devenir négatif.
Il correspond, car il trouve "une correspondance" et non une correspondance de la chaîne complète. Vous pouvez résoudre ce problème en modifiant votre expression rationnelle pour qu'elle recherche spécifiquement le début et la fin de la chaîne.
^\d+$
Peut-être que ma méthode vous aidera.
public static bool IsNumber(string s)
{
return s.All(char.IsDigit);
}
Cela fonctionne avec des nombres entiers et décimaux. Cela ne correspond pas si le nombre contient le séparateur de milliers de coma,
"^-?\\d*(\\.\\d+)?$"
quelques chaînes qui correspondent à ceci:
894
923.21
76876876
.32
-894
-923.21
-76876876
-.32
des chaînes qui ne le font pas:
hello
9bye
hello9bye
888,323
5,434.3
-8,336.09
87078.
^\d + $, qui est "début de chaîne", "1 ou plusieurs chiffres", "fin de chaîne" en anglais.
Voici mon travail:
^(-?[1-9]+\\d*([.]\\d+)?)$|^(-?0[.]\\d*[1-9]+)$|^0$
Et des tests
Tests positifs:
string []goodNumbers={"3","-3","0","0.0","1.0","0.1","0.0001","-555","94549870965"};
Tests négatifs:
string []badNums={"a",""," ","-","001","-00.2","000.5",".3","3."," -1","--1","-.1","-0"};
Vérifié non seulement pour C #, mais aussi avec Java, Javascript et PHP
Désolé pour le formatage laid. Pour n'importe quel nombre de chiffres:
[0-9]*
Pour un ou plusieurs chiffres:
[0-9]+
Si vous devez vérifier si tous les chiffres sont des nombres (0-9) ou non,
^[0-9]+$
1425 VRAI
0142 TRUE
0 VRAI
1 VRAI
154a25 FAUX
1234 = 3254 FAUX
Bien qu'aucune des solutions ci-dessus ne corresponde à mes objectifs, cela a fonctionné pour moi.
var pattern = @"^(-?[1-9]+\d*([.]\d+)?)$|^(-?0[.]\d*[1-9]+)$|^0$|^0.0$";
return Regex.Match(value, pattern, RegexOptions.IgnoreCase).Success;
Exemple de valeurs valides: "3", "-3", "0", "0.0", "1.0", "0.7", "690.7", "0.0001", "-555", "945465464654"
Exemple de valeurs non valides: "a", "", "", ".", "-", "001", "00.2", "000.5", ".3", "3.", "-1" , "--1", "-.1", "-0", "00099", "099"
Autre méthode: si vous souhaitez faire correspondre des numéros internationaux tels que le persan ou l’arabe, vous pouvez utiliser l’expression suivante:
Regex = new Regex(@"^[\p{N}]+$");
Pour correspondre à un caractère de période littéral, utilisez:
Regex = new Regex(@"^[\p{N}\.]+$");
utiliser des ancres de début et de fin.
Regex regex = new Regex(@"^\d$");
Use "^\d+$" if you need to match more than one digit.
Je pense que celui-ci est le plus simple et qu’il accepte, par exemple, les chiffres européens et américains. USA 10 555,12 Européen 10 555,12 Celui-ci n'autorise pas non plus plusieurs virgules ou points l'un après l'autre, par ex. 10..22 ou 10, .22 En plus de cela, des nombres tels que .55 ou, 55 passeraient. Cela peut être pratique.
^([,|.]?[0-9])+$
Regex pour les nombres entiers et les nombres en virgule:
^[+-]?\d*\.\d+$|^[+-]?\d+(\.\d*)?$
Un numéro peut commencer par un point (sans chiffres de début) et un numéro peut se terminer par un point (sans les derniers caractères). Ci-dessus, l'expression rationnelle reconnaîtra les deux nombres corrects. UNE . (point) lui-même sans chiffres n'est pas un nombre correct. C'est pourquoi nous avons besoin de deux parties de regex (séparées par un "|").
J'espère que cela t'aides.
Si vous souhaitez extraire uniquement des nombres d'une chaîne, le modèle "\ d +" devrait vous aider.