匹配小数的正则:
$a = 1.0;
$pattern = '/^\d+\.\d+$/';$result = preg_match($pattern, $a);
echo $result;           //输出结果是0为什么没有匹对成功呢?把$a改成$a=1.1就行,反正只要小数位不是0就可以。
但是\d不是能匹配所有数字吗?另外这个正则在php手册中是这样写的,也是匹配出小数:
$pattern = '/^(\d+)?\.\d+$/';
和我这样写二者有什么区别吗?谢谢!

解决方案 »

  1.   

    1.0  ==> float型preg_match 参数 $subject要求是string,转换成了"1",匹配不上了你可传字符型进去,,弱类型有时候害死人
      

  2.   

    你写的没错,php 也没错你令
    $a = '1.0';就可以得到正确的结果正则表达式是用于字符串做模式匹配的
    如果你给他的不是字符串,那他就要做数据类型转换
    1.0 转换成字符串就变成 1 了,这是php的内部机制,不必要问为什么
      

  3.   

    这样啊~!哈哈谢谢了!
    那 "/^\d+\.\d+$/" 和 "/^(\d+)?\.\d+$/"这两个正则有什么不一样呢?
      

  4.   

    "/^\d+\.\d+$/"   .之前必须有数字。"/^(\d+)?\.\d+$/"  .之前可以没有数字。?表示匹配0次或1次。。
      

  5.   

    我的意思是手册上这么写 /^(\d+)?\.\d+$/ 是不是有它的独特之处呢?我想他应该不会无缘无故的把(\d+)用括号括起来然后加个?吧?
      

  6.   

    不好意思啊刚才没看到!那如果我这样写 "/^\d*\.\d+$/" 就和 "/^(\d+)?\.\d+$/"一样了?