我正在使用Perl将一些XML转换为JSON。如果XML属性是一个数字,我不想在它周围加引号,以便JSON将它视为数字而不是字符串。我如何判断一个Perl字符串是否是一个数字(只包含数字0到9以及可能的一个小数点)?在Perl中,如何判断字符串是否是数字?
9
A
回答
19
的JSON specification提供了一个数字的格式相当明确的规则,所以下面的正则表达式应该工作:
/^-?(0|([1-9][0-9]*))(\.[0-9]+)?([eE][-+]?[0-9]+)?$/
20
尝试Scalar::Util::looks_like_number
:
如:
use Scalar::Util qw(looks_like_number);
if (looks_like_number($thingy)) {
print "looks like $thingy is a number...\n"
}
2
4
您可以强制它成为一个数字,然后将其与原始字符串进行比较。
if($value eq $value+0){
print "$value is a number\n";
}
(注:它只会为简单的数字的工作,像123或12.3)
-1
你只是读取XML到Perl中的数据结构,并让Perl的JSON可能更容易图书馆找出你的。它已经检查了这一点,所以除非你的数字实际上是XML中的一个字符串(例如它后面有一个空格等),否则JSON->encode()
会将它编码为JSON数字。
3
我认为(从最近的经验)你犯了一个错误的手动XML-> JSON转换。在这个过程中,我遇到了很多问题,其中最重要的是涉及不正确逃脱的角色。
我会推荐用许多XML :: *模块之一(我使用XML :: Simple)解析XML,然后使用JSON :: XS将其渲染为JSON。 JSON :: XS允许您将Perl数据结构转换为JSON; XML :: Simple将XML解析为Perl数据结构。同时,您可以根据需要操作Perl数据结构。
底线是你不再关心引用/转义字符。
3
假设你不需要支持不同寻常的东西(如SCI-符号)这种近乎工作(而且是非常简单):
#!/usr/bin/perl
my $foo = '1234.5';
if($foo =~ /\d+/){
print "$foo is a number\n";
}
的原因,它不完全工作,因为你可以有连字符和点(只要你有至少一个数字)。 '--1--2'评估为零,'1.2.3.4.5'评为1.2(第二个点和后面的所有内容都被忽略)。这对你来说可能是也可能不是问题。
相关问题
- 1. 如何判断未知数字是否在字符串中?
- 2. 如何判断字符串中是否有数字?
- 3. 如何判断某个字母是否在字符串中 - javascript
- 4. bash - 如何判断变量是字符串还是数字
- 5. 如何判断boost :: split_iterator是否在字符串中间开始?
- 6. 判断一个字符串是否是另一个子字符
- 7. 如何判断一个字符串是否是网址?
- 8. 如何判断pick()的结果是否是字符串
- 9. 如何判断字符串在元值中是空还是空?
- 10. 如何判断数组中的值是否在字符串中的次数
- 11. 如何判断一个字符串是否包含Guid作为子字符串?
- 12. 如何判断VARCHAR变量是否包含子字符串?
- 13. 如何判断const char *是否指向有效的字符串?
- 14. 如何判断正则表达式是否匹配字符串?
- 15. 如何判断用户是否输入了字符串?
- 16. 如何判断某个字符串之前的任何字符是否匹配?
- 17. 如何判断Watson会话是否将字符串识别为数字
- 18. 如何判断该数字是否是回文中的编号
- 19. 如何判断Request.Form中的值是否是一个数字? (C#)
- 20. 如何判断字体是否为符号字体?
- 21. 如何判断字符串是URL还是本地路径?
- 22. 在Perl中,如何测试字符串是否是回文?
- 23. 如何判断字符串是否以R中的换行符(EOL)结尾?
- 24. 如何判断一个字符串是否未在bash shell脚本中定义?
- 25. 如何判断一个字符串是否以hh:mm格式在python中?
- 26. 在shell中,如何判断一个字符串是否以路径名开头?
- 27. 是否有任何算法来判断一个字符串是否有意义
- 28. 我如何判断一个字符串是否只包含字母和空格
- 29. 如何判断一个C++模板类型是否是C风格字符串
- 30. 如何判断一个字符串是否代表一个整数?
只是意识到,look_like_number对'inf','nan','1E02'返回true,并且可能还有其他几个字符串,您可能不希望它们是数字。 – mirod 2009-07-11 05:01:58
为什么`1E02`不能成为一个数字?它的科学计数为100. – 2009-09-11 12:30:03