我的问题是,为什么'_'(下划线)字符的位置导致这个问题?
我继承了一个脚本,在函数中使用php的preg_replace。所使用的正则表达式对使用它的任何数字返回0。
function foo($number){
$number = preg_replace('/[a-z$,-_]/i','',$number);
// more code...
}
我做了一些调试,发现问题出在preg_replace()上。一位同事提到,可能是正则表达式中字符的顺序导致了这个bug。所以,我摆弄了一下,发现这是真的。"_"(下划线)字符的位置是罪魁祸首。我把它改成:
'/[a-z$_,-]/i'
…一切都很好。
那么,问题是,为什么'_'(下划线)字符的位置会导致这个问题?我在谷歌上搜索了一下,但没有找到,我想这个论坛里的人可能有答案。
谢谢你的启发!jc
这是连字符的位置,而不是下划线。使用[a-z$,-_]
,您无意中创建了从,
到_
的字符范围。将连字符放在末尾或转义。
逗号,
是ASCII 0x2C,下划线_
是0x5F,数字介于两者之间(0x30到0x39)。
有些字符需要像这样转义
[a-z,'-_]