在Perl中,如何判断字符串是否为数字?

Cha*_*hon 9 perl

我使用Perl将一些XML转换为JSON.如果XML属性是一个数字,我不想在它周围加上引号,以便JSON将其视为数字而不是字符串.如何判断Perl字符串是否为数字(仅包含0到9的数字,可能还有一个小数点)?

dlo*_*owe 21

试试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"
}
Run Code Online (Sandbox Code Playgroud)

  • 只是意识到look_like_number为'inf','nan','1E02'返回true,可能还有一些你可能不期望成为数字的字符串. (7认同)
  • 为什么`1E02`不是预期的数字?这是100的科学记数法. (2认同)

cob*_*bal 19

JSON规范提供了一个数字的格式相当明确的规则,所以下面的正则表达式应该工作:

/^-?(0|([1-9][0-9]*))(\.[0-9]+)?([eE][-+]?[0-9]+)?$/
Run Code Online (Sandbox Code Playgroud)