我的问题是,为什么'_'(下划线)字符的位置会导致这个问题?
我继承了一个在函数中使用php的preg_replace的脚本。使用的正则表达式在其使用的任何数字上返回0。
function foo($number){
$number = preg_replace('/[a-z$,-_]/i','',$number);
// more code...
}
我做了一堆调试,发现问题出在preg_replace()上。一位同事提到正则表达式中字符的顺序可能导致错误。所以,我玩这个并发现它是真的。 '_'(下划线)字符的位置是罪魁祸首。我改为:
'/[a-z$_,-]/i'
......一切正常。
那么,问题又是为什么'_'(下划线)字符的位置会导致这个问题?我用Google搜索但没有找到它,我认为这个论坛的思想可能有答案。
感谢任何启蒙! -jc
答案 0 :(得分:3)
它是连字符的位置,而不是下划线。使用[a-z$,-_]
,您无意中创建了从,
到_
的字符范围。把连字符放在最后或逃避它。
逗号,
为ASCII 0x2C,下划线_
为0x5F,数字介于(0x30至0x39)之间。
(参考:ASCII table)
答案 1 :(得分:0)
某些角色需要像这样转义
[a-z,\-_]