En Perl, comment savoir si une chaîne est un nombre?
Je suis à l'aide de Perl pour convertir du XML en JSON. Si l'attribut XML est un nombre, je ne veux pas mettre des guillemets autour de lui, de sorte que JSON va le traiter comme un nombre et pas une chaîne. Comment puis-je savoir si un Perl chaîne est un nombre (contient uniquement des chiffres de 0 à 9 et, éventuellement, d'un point décimal)?
source d'informationauteur Chad DeShon
Vous devez vous connecter pour publier un commentaire.
La JSON spécification fournit assez de règles claires sur le format d'un nombre, donc la regex suivante devrait fonctionner:
Essayer
Scalar::Util::looks_like_number
:E. g.:
Vous pouvez juste en vigueur dans un certain nombre puis de la comparer à la chaîne d'origine.
( Note: cela ne fonctionne qu'avec des nombres simples, comme 123 ou 12,3 )
Je pense (à partir d'expériences récentes) que vous faites une erreur de faire toute sorte de manuel XML->JSON de conversion. J'ai rencontré de nombreux problèmes dans le processus, pas moins de qui a impliqué de manière incorrecte des caractères d'échappement.
Je recommanderais d'analyse XML avec l'un des nombreux XML::* modules (j'ai utilisé XML::Simple) et ensuite rendu sous forme de JSON à l'aide de JSON::XS. JSON::XS vous permet de convertir un Perl structure de données JSON, XML::Simple analyse de fichier XML en Perl structure de données. En attendant vous pouvez manipuler le Perl structure de données que vous le souhaitez.
Ligne de fond est que vous n'avez plus besoin de citer/échappement des caractères.
En supposant que vous n'avez pas besoin de l'appui des trucs inhabituels (comme sci-notation) cela fonctionne presque (et qui est très simple):
La raison pour laquelle il n'a pas entièrement le travail est parce que vous pouvez avoir des tirets et des points n'importe où (comme beaucoup comme vous s'il vous plaît) tant que vous avez au moins un chiffre actuel). '--1--2' évalue à zéro, et "1.2.3.4.5' est évaluée comme 1,2 (le deuxième point et tout ce qui suit sont ignorés). Cela peut ou peut ne pas être un problème pour vous.
Je pense que cette question de perlfaq de résoudre votre problème.
Généralement le problème est de définir ce qu'est exactement que vous voulez lire en nombre.
Il peut être plus facile pour vous de lire les données XML dans une structure de données en Perl et laissez-Perl librairie JSON figure it out pour vous. Il a déjà vérifier que, donc, sauf si votre numéro est en fait une chaîne de caractères dans le fichier XML (par exemple, il y a un espace après, etc)
JSON->encode()
va le coder comme un JSON nombre.