在Perl中,如何判断字符串是否是数字?
我正在使用Perl将一些XML转换为JSON。如果XML属性是一个数字,我不想在它周围加引号,这样JSON就会将它视为一个数字而不是字符串。如何判断Perl字符串是否是数字(仅包含数字0到9,可能还有一个小数点)?尝试: 例如: 对于数字的格式,提供了相当明确的规则,因此以下正则表达式应该可以工作:在Perl中,如何判断字符串是否是数字?,perl,Perl,我正在使用Perl将一些XML转换为JSON。如果XML属性是一个数字,我不想在它周围加引号,这样JSON就会将它视为一个数字而不是字符串。如何判断Perl字符串是否是数字(仅包含数字0到9,可能还有一个小数点)?尝试: 例如: 对于数字的格式,提供了相当明确的规则,因此以下正则表达式应该可以工作: /^-?(0|([1-9][0-9]*))(\.[0-9]+)?([eE][-+]?[0-9]+)?$/ 我认为perlfaq的问题解决了你们的问题 一般来说,问题在于定义您想要读取的数字 “-
/^-?(0|([1-9][0-9]*))(\.[0-9]+)?([eE][-+]?[0-9]+)?$/
我认为perlfaq的问题解决了你们的问题
一般来说,问题在于定义您想要读取的数字
- “-1.312”是有效数字吗
- “inf”是什么
- 5.34123412E-03
if( $value eq $value+0 ){
print "$value is a number\n";
}
(注意:它只适用于简单的数字,如123或12.3)将XML读入Perl中的数据结构并让Perl的JSON库为您计算出来可能会更容易。它已经检查过了,所以除非您的数字实际上是XML中的字符串(例如,后面有空格等)
JSON->encode()
将其编码为JSON数字。我认为(根据最近的经验)您在进行任何手动XML->JSON转换时都犯了错误。在这个过程中,我遇到了许多陷阱,其中包括错误转义的字符
我建议您使用许多XML:::*模块(我使用的是XML::Simple)之一解析XML,然后使用JSON::XS将其呈现为JSON。XS允许您将Perl数据结构转换为JSON;Simple将XML解析为Perl数据结构。同时,您可以根据需要操纵Perl数据结构
底线是您不再关心引用/转义字符。假设您不需要支持不寻常的东西(如sci符号),这几乎是可行的(而且非常简单):
它不能完全工作的原因是,只要至少有一个数字,你就可以在任何地方使用连字符和点(可以随意使用)--1--2'的计算结果为零,“1.2.3.4.5”的计算结果为1.2(忽略第二个点和后面的所有内容)。这可能是您的问题,也可能不是。请注意,对于“inf”、“nan”、“1E02”和一些您可能不希望成为数字的字符串,looks\u-like\u number返回true。为什么
1E02
不是一个期望成为数字的字符串?它是100的科学符号。“0”与“0e0”或“0.0”或“-0”相同吗?Perl通常这么认为,但是您的测试产生了相反的结果。
if( $value eq $value+0 ){
print "$value is a number\n";
}
#!/usr/bin/perl
my $foo = '1234.5';
if( $foo =~ /\d+/ ){
print "$foo is a number\n";
}