早安編碼小夥子,正則表達式清潔方法PHP
我正在寫一個小的正則表達式的特殊字符(&,*等)
這是我的代碼看起來像太乾淨的文件名:
public function clean($string, $bool = false)
{
$string = html_entity_decode($string, ENT_QUOTES);
$string = str_replace("'", "", $string);
$string = str_replace('"', "", $string);
$string = str_replace("&", "en", $string);
$string = str_replace("-", "_", $string);
//ALLE VAGE TEKENS VERVANGEN MET _
$weirdChars = Proces::normalInput($string , true);
if(count($weirdChars[0]) > 0)
{
foreach($weirdChars[0] as $char)
{
$string = str_replace($char, "_", $string);
}
}
if($bool)
$string = ucfirst(preg_replace('!_+!', '_', strtolower($string)));
else
$string = preg_replace('!_+!', '_', strtolower($string));
if(isset($string[0]) && $string[0] == "_")
$string = substr($string, 1);
if(substr($string, -1) == "_")
return substr($string,0,-1);
return $string;
}
public function normalInput($string, $bool = false) //STRING
{
$patern = '/[^_a-zA-Z0-9-]/';
if(preg_match_all($patern, $string, $matches))
{
if($bool)
return $matches;
else
return false;
}
else
{
if($bool)
return $matches;
else
return true;
}
}
這2種方法一起工作,可以正常使用,但我注意到一個小問題。 我在normalInput方法使用的模式是這樣的:
$patern = '/[^_a-zA-Z0-9-]/';
這是好的,但我想排除在文件名中的點(否則我的文件擴展名將會得到像blaatfoo_pdf代替blaatfoo.pdf)。
你能幫我解決這個問題嗎?
親切的問候,
的Jordy SUOS(取一杯咖啡,在這個美麗的早晨..一個不錯的sigarette ON ME)
頂部,bedankt)! – Jordy 2012-03-16 10:56:26