PHP正则表达式脚本用于删除任何不是字母或数字0到9的内容,并将空格替换为连字符--改为小写--确保只有一个连字符--字词之间没有--或--等等。
例如:
快棕狐跳结果:快棕狐跳。
那只敏捷的棕色狐狸跳了起来!结果:快棕狐跳。
那只敏捷的棕色狐狸跳了起来!结果:快棕狐跳。
例如:@#$%^ &*()_+=
例如:快1234567890 ~!@#$%^ &*()_+=
有人对正则表达式有想法吗?
谢谢!
发布于 2010-10-29 12:49:09
由于您似乎希望将所有非字母数字字符序列替换为单个连字符,因此可以使用以下命令:
$str = preg_replace('/[^a-zA-Z0-9]+/', '-', $str);但这可能导致导致或尾随连字符,可以用trim删除。
$str = trim($str, '-');若要将结果转换为小写,请使用strtolower
$str = strtolower($str);所以,所有这些都是:
$str = strtolower($str);
$str = trim($str, '-');
$str = preg_replace('/[^a-z0-9]+/', '-', $str);或者用紧凑型的单线衬里:
$str = strtolower(trim(preg_replace('/[^a-zA-Z0-9]+/', '-', $str), '-'));发布于 2010-10-29 18:25:11
我只是在做一些类似的事情,我想出了这个小代码,它还考虑了拉丁文字符的使用。
这是示例字符串:
$str = 'El veloz murciélago hindú comía fe<!>&@#$%&!"#%&?¡?*liz cardillo y kiwi. La cigüeña ¨^;.-|°¬tocaba el saxofón detrás del palenque de paja';
首先,我将字符串转换为later实体,以便以后更容易使用。
$friendlyURL = htmlentities($str, ENT_COMPAT, "UTF-8", false);
然后用相应的ascii字符替换拉丁语字符(á变为a,Ü变为U,等等):
$friendlyURL = preg_replace('/&([a-z]{1,2})(?:acute|circ|lig|grave|ring|tilde|uml|cedil|caron);/i','\1',$friendlyURL);
然后,我将字符串从html实体转换回符号,以便以后更容易使用。
$friendlyURL = html_entity_decode($friendlyURL,ENT_COMPAT, "UTF-8");
接下来,我将所有非字母数字字符替换为连字符。
$friendlyURL = preg_replace('/[^a-z0-9-]+/i', '-', $friendlyURL);
我在字符串中删除额外的连字符:
$friendlyURL = preg_replace('/-+/', '-', $friendlyURL);
我删除前面和后面的连字符:
$friendlyURL = trim($friendlyURL, '-');
并最终将所有转换为小写:
$friendlyURL = strtolower($friendlyURL);
合在一起:
function friendlyUrl ($str = '') {
$friendlyURL = htmlentities($str, ENT_COMPAT, "UTF-8", false);
$friendlyURL = preg_replace('/&([a-z]{1,2})(?:acute|circ|lig|grave|ring|tilde|uml|cedil|caron);/i','\1',$friendlyURL);
$friendlyURL = html_entity_decode($friendlyURL,ENT_COMPAT, "UTF-8");
$friendlyURL = preg_replace('/[^a-z0-9-]+/i', '-', $friendlyURL);
$friendlyURL = preg_replace('/-+/', '-', $friendlyURL);
$friendlyURL = trim($friendlyURL, '-');
$friendlyURL = strtolower($friendlyURL);
return $friendlyURL;
}测试:
$str = 'El veloz murciélago hindú comía fe<!>&@#$%&!"#%&-?¡?*-liz cardillo y kiwi. La cigüeña ¨^`;.-|°¬tocaba el saxofón detrás del palenque de paja';
echo friendlyUrl($str);结果:
el-veloz-murcielago-hindu-comia-fe-liz-cardillo-y-kiwi-la-ciguena-tocaba-el-saxofon-detras-del-palenque-de-paja我想Gumbo的答案更适合你的问题,它是一个更短的代码,但我认为它对其他人是有用的。
干杯,阿德里亚娜
发布于 2013-10-01 15:46:52
在一项职能中:
function sanitize_text_for_urls ($str)
{
return trim( strtolower( preg_replace(
array('/[^a-z0-9-\s]/ui', '/\s/', '/-+/'),
array('', '-', '-'),
iconv('UTF-8', 'ASCII//TRANSLIT', $str) )), '-');
}它所做的:
// Solve accents and diacritics
$str = iconv('UTF-8', 'ASCII//TRANSLIT', $str);
// Leave only alphanumeric (respect existing hyphens)
$str = preg_replace('/[^a-z0-9-\s]/ui', '', $str);
// Turn spaces to hyphens
$str = preg_replace('/\s+/', '-', $str);
// Remove duplicate hyphens
$str = preg_replace('/-+/', '-', $str);
// Remove trailing hyphens
$str = trim($str, '-');
// Turn to lowercase
$str = strtolower($str);注意:
您可以通过传递一个数组组合多个preg_replace。见顶部的函数。
例如:
// Électricité, plâtrerie --> electricite-platrerie
// St. Lücie-Pétêrès --> st-lucie-peteres
// -Façade- & gros œuvre --> facade-gros-oeuvre
// _-Thè quîck ~`!@#&$%^ &*()_+= ---{}|][ :"; <>?.,/ fóx - jümpëd_-
// the-quick-fox-jumped编辑:在regex末尾添加"/u“以使用UTF8
编辑:由于@LuBre,已记录了重复和引导/尾随连字符
https://stackoverflow.com/questions/4051889
复制相似问题