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 ne corresponde que lorsque la chaîne contenue est composée de tous les nombres; mais avec les deux exemples ci-dessous, il correspond à une chaîne qui contient tous les nombres plus un signe égal comme "1234 = 4321". Je suis sûr qu'il existe un 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 compte, j'utilise C # et .NET2.0.
Réponses:
Utilisez les ancres de début et de fin.
À utiliser
"^\d+$"
si vous devez faire correspondre plusieurs chiffres.Notez que
"\d"
cela correspondra[0-9]
et d'autres caractères numériques comme les chiffres arabes orientaux٠١٢٣٤٥٦٧٨٩
. Utilisez"^[0-9]+$"
pour restreindre 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 le guide complet de @tchrist pour analyser les nombres avec des expressions régulières .
la source
"^\d{6}$"
. Certains autres pays ont des règles plus compliquées pour les codes postaux, donc les solutions regex pour plusieurs pays peuvent aussi devenir assez compliquées. Découvrez quelques exemples sur stackoverflow.com/q/578406/1288Votre expression régulière correspondra à tout ce qui contient un nombre, vous souhaitez utiliser des ancres pour correspondre à la chaîne entière, puis correspondre à un ou plusieurs nombres:
Le
^
va ancrer le début de la chaîne, le$
va ancrer la fin de la chaîne et le+
va correspondre à un ou plusieurs de ce qui le précède (un nombre dans ce cas).la source
Si vous devez tolérer la virgule décimale et le marqueur mille
Vous aurez besoin d'un "-" si le nombre peut devenir négatif.
la source
-
) et la période (.
) se produisent plusieurs fois.-
et en.
option via?
.-?\d+(?:\.\d+)?
correspondrait à des nombres entiers ou décimaux. (Le?:
dans les parens fait juste des parens un groupe non-capturant et utilisé uniquement pour le groupe pour plus de clarté.)^-?[0-9][0-9,\.]*$
pour éviter d'échouer pour le cas de base. + est remplacé par *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 rechercher spécifiquement le début et la fin de la chaîne.
la source
Peut-être que ma méthode vous aidera.
la source
Char.IsDigit
retournetrue
pour tout caractère membre de la catégorie UnicodeCategory.DecimalDigitNumber . Ce n'est peut-être pas ce que souhaite le PO. Voir aussi pourquoi Char.IsDigit renvoie true pour les caractères qui ne peuvent pas être analysés en int? .Cela fonctionne avec des nombres entiers et décimaux. Il ne correspond pas si le nombre a le séparateur coma mille,
quelques chaînes qui correspondent à ceci:
quelques chaînes qui ne le font pas:
la source
^ \ d + $, qui est "début de chaîne", "1 ou plusieurs chiffres", "fin de chaîne" en anglais.
la source
Si vous devez vérifier si tous les chiffres sont des chiffres (0-9) ou non,
1425 TRUE
0142 TRUE
0 VRAI
1 VRAI
154a25 FAUX
1234 = 3254 FAUX
la source
Voici mon travail:
Et quelques tests
Tests positifs:
Tests négatifs:
Vérifié non seulement pour C #, mais aussi avec Java, Javascript et PHP
la source
Désolé pour le formatage moche. Pour n'importe quel nombre de chiffres:
Pour un ou plusieurs chiffres:
la source
Bien qu'aucune des solutions ci-dessus ne convienne à mon objectif, cela a fonctionné pour moi.
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"
la source
Une autre façon: si vous souhaitez faire correspondre des numéros internationaux tels que le persan ou l'arabe, vous pouvez donc utiliser l'expression suivante:
Pour faire correspondre l'utilisation de caractère de période littérale:
la source
utilisez des ancres de début et de fin.
la source
Regex pour les nombres entiers et à virgule flottante:
Un nombre peut commencer par un point (sans les premiers chiffres) et un nombre peut se terminer par un point (sans les derniers chiffres). Au-dessus de l'expression régulière, les deux seront reconnus comme des nombres corrects.
UNE . (point) lui-même sans chiffres n'est pas un nombre correct. C'est pourquoi nous avons besoin de deux parties d'expressions régulières (séparées par un "|").
J'espère que cela t'aides.
la source
Je pense que celui-ci est le plus simple et il accepte la manière européenne et américaine d'écrire des nombres, par exemple USA 10.555,12 European 10.555,12 De plus, celui-ci ne permet pas plusieurs virgules ou points l'un après l'autre, par exemple 10..22 ou 10, .22 En plus de ces chiffres comme .55 ou, 55 passeraient. Cela peut être utile.
la source
Si vous souhaitez extraire uniquement des nombres d'une chaîne, le modèle "\ d +" devrait vous aider.
la source
Regex regex = nouveau Regex ("^ [0-9] {1,4} = [0-9] {1,4] $")
la source