我正在使用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