2011-11-10 108 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