$test = "!!! sdfsdf sd$$$fdf ___";
$test = str_replace(' ', '_', $test); // Turn all spaces into underscores.
echo $test."<br />"; // Output: !!!___sdfsdf___sd$$$fdf______
$test = preg_replace('/[^a-zA-Z0-9_-]/', '-', $test); // Replace anything that isn't alphanumeric, or _-, with a hyphen.
echo $test."<br />"; // Output: !!!___sdfsdf___sd---fdf______
$test = preg_replace('/([_-])\1+/', '$1', $test); // Reduce multiple _- in a row to just one.
echo $test."<br />"; // Output: !_sdfsdf_sd-fdf_
上面的代码是我目前所拥有的,我正在试图弄清楚REGEX是如何截断任何非字母数字字符的。所以将最终输出从“!_sdfsdf_sd-fdf_”转换为“sdfsdf_sd-fdf”。
答案 0 :(得分:3)
$clean = preg_replace('~(^[^a-z0-9]+)|([^a-z0-9]+$)~i', '', $str);
答案 1 :(得分:2)
答案 2 :(得分:2)
您可以用以下代码替换整个代码:
$test = preg_replace('/[^a-zA-Z0-9]+/', '_', $test);
$test = trim($test, '_');
第一个将使用_
替换所有出现的一个或多个非法字符,第二个将从开头和结尾移除剩余的_
。
答案 3 :(得分:1)
[a-zA-Z0-9].*[a-zA-Z0-9]
含义:阅读任何字母数字字符,然后尽可能多地阅读,确保我们最终可以获得至少一个字母数字字符。