使用下划线字符时,php preg_replace返回0值

时间:2014-05-28 13:37:05

标签: php regex preg-replace

我的问题是,为什么'_'(下划线)字符的位置会导致这个问题?

我继承了一个在函数中使用php的preg_replace的脚本。使用的正则表达式在其使用的任何数字上返回0。

function foo($number){ 
  $number = preg_replace('/[a-z$,-_]/i','',$number);
  // more code...
}

我做了一堆调试,发现问题出在preg_replace()上。一位同事提到正则表达式中字符的顺序可能导致错误。所以,我玩这个并发现它是真的。 '_'(下划线)字符的位置是罪魁祸首。我改为:

'/[a-z$_,-]/i'

......一切正常。

那么,问题又是为什么'_'(下划线)字符的位置会导致这个问题?我用Google搜索但没有找到它,我认为这个论坛的思想可能有答案。

感谢任何启蒙! -jc

2 个答案:

答案 0 :(得分:3)

它是连字符的位置,而不是下划线。使用[a-z$,-_],您无意中创建了从,_的字符范围。把连字符放在最后或逃避它。

逗号,为ASCII 0x2C,下划线_为0x5F,数字介于(0x30至0x39)之间。 (参考:ASCII table

答案 1 :(得分:0)

某些角色需要像这样转义

[a-z,\-_]