2011-11-10 163 views
1

在此先感謝,我覺得我可以忽略一些非常簡單的東西。我有一些數字郵政編碼,我需要運行一個函數...但是,我需要驗證輸入是一個五位數字符串。但是,無論我如何將數字轉換爲字符串,都是失敗的。有一些其他的方式,我應該編碼或格式?:PHP數字字符串preg_match

<?php 
$code=07307; 
$wrapped_code='07307'; 
$castcode=(string)$code; 
$strcode=''.$code; 

echo (preg_match('/^\d{5}$/', $code))?'success with code<br/>':'code failed, saw:'.$code."<br/>"; 
echo (preg_match('/^\d{5}$/', $wrapped_code))?'success with wrapped_code<br/>':'wrapped_code failed, saw:'.$wrapped_code."<br/>"; 
echo (preg_match('/^\d{5}$/', $castcode))?'success with castcode<br/>':'castcode failed, saw:'.$castcode."<br/>"; 
echo (preg_match('/^\d{5}$/', $strcode))?'success with strcode<br/>':'strcode failed, saw:'.$strcode."<br/>"; 
?> 

回答

3

試試這個代碼:

echo 07307; 

你會發現,與直覺相反,你得到的結果3783。這是因爲從0開始的數字被視爲八進制數,即基數爲8.因此,當您將07307轉換爲字符串時,將得到"3783"。如果前導零很重要,你應該首先使用一個字符串。

+0

謝謝。我知道我需要將它作爲一個字符串來處理,結果發現我有一個複雜的錯誤:我從CSV文件導入初始值,當感興趣的列是最後一列時,我沒有正確刪除換行符......我不知道爲什麼這一點很重要,但是當我在它後面添加一個虛擬列時,事情就像他們應該做的那樣。 –

1

從你說你想要實現,我想你會更好使用is_numericstrlen,作爲is_numeric檢查變量是否是數字或數字字符串。

+0

'is_numeric'會高興地匹配'74.25',這顯然不是所希望的... – lonesomeday