In PHP, regular expression to remove the pound sign from a string, if exists
In PHP, I want to remove the pound sign (#) from a hex string if it exists.
I tried the following:
$str = "#F16AD3开发者_JAVA百科";
//Match the pound sign in the beginning
if (preg_match("/^\#/", $str)) {
//If it's there, remove it
preg_replace('/^\#/', '', $str);
};
print $str;
But it didn't work. It prints out #F16AD3
How can I remove the pound only if it exists?
echo ltrim('#F16AD3', '#');
http://php.net/manual/en/function.ltrim.php
EDIT: If you are only testing for the pound sign at the beginning of the string you can can use strpos
:
if(strpos('#F16AD3', '#') === 0) {
// found it
}
You have to assign the response back to the variable:
$str = preg_replace('/^\#/', '', $str);
Also, you don't need to do the check with preg_match at all, it's redundant.
If you're just looking for a pound sign at the beginning of a string, why not use something simpler than regular expressions?
if ($str[0] == '#')
$str = substr($str, 1);
The reason you are not seeing a change is because you are discarding the result of preg_replace
. You need to assign it back to the variable:
//Match the pound sign in the beginning
if (preg_match("/^#/", $str)){
//If it's there, remove it
$str = preg_replace('/^#/', '', $str);
};
However, notice that the call to preg_match
is completely redundant. You are already checking if it exists in preg_replace
! :) Therefore, just do this:
//If there is a pound sign at the beginning, remove it
$str = preg_replace('/^#/', '', $str);
@ennuikiller is correct, no escaping necessary. Also, you don't need to check for a match, just replace it:
<?php
$color = "#ff0000";
$color = preg_replace("/^#/", "", $color);
echo $color;
?>
OUTPUT
ff0000
Why using preg_replace for this?
echo str_replace("#","",$color);
You're calling two different preg functions, this might be over-optimization, but str_replace('#' , '' , $color)
solves your problem faster/efficiently. I'm sure other people will answer your specific regex issue.
精彩评论