我试图制作一个preg-replace模式,将文本“orderId”转换为“order-id”。
$argumentName = "orderId";
$argumentName = preg_replace("/([A-Z])/e", "-strtolower($1)", $argumentName);
echo $argumentName;
此行的输出为“order0d”。为什么这不起作用?
答案 0 :(得分:2)
由于您指定替换字符串是表达式,因此:
strtolower($1)
是'i'
(应该是),而且:
-strtolower($1)
是-'i'
(“否定'i'
”),强制字符串'i'
被解释为数字 - 0
。
你想要的是
$argumentName = preg_replace("/([A-Z])/e", "'-' . strtolower($1)", $argumentName);
连接字符串'-'
和'i'
。
答案 1 :(得分:1)
为什么要使用/e
?
$argumentName = strtolower(preg_replace("/([A-Z])/", "-$1", $argumentName));
这会在任何大写字母前放置一个破折号,然后小写整个字符串。