В PHP регулярное выражение для удаления знака фунта из строки, если существует - PullRequest
3 голосов
/ 21 августа 2010

В PHP я хочу удалить знак фунта (#) из шестнадцатеричной строки , если существует.

Я попробовал следующее:

$str = "#F16AD3";

//Match the pound sign in the beginning
if (preg_match("/^\#/", $str)) {
  //If it's there, remove it
  preg_replace('/^\#/', '', $str);
};

print $str;

Но это не сработало. Распечатывает #F16AD3

Как я могу снять фунт, только если он существует?

Ответы [ 7 ]

14 голосов
/ 21 августа 2010
echo ltrim('#F16AD3', '#');

http://php.net/manual/en/function.ltrim.php

РЕДАКТИРОВАТЬ: Если вы проверяете только знак фунта в начале строки, вы можете использовать strpos:

if(strpos('#F16AD3', '#') === 0) {
    // found it
}
6 голосов
/ 21 августа 2010

Вы должны присвоить ответ обратно переменной:

$str = preg_replace('/^\#/', '', $str);

Кроме того, вам вообще не нужно выполнять проверку с помощью preg_match, это избыточно.

4 голосов
/ 21 августа 2010

Причина, по которой вы не видите изменений, заключается в том, что вы отбрасываете результат preg_replace. Вам необходимо присвоить его обратно переменной:

//Match the pound sign in the beginning
if (preg_match("/^#/", $str)){
    //If it's there, remove it
    $str = preg_replace('/^#/', '', $str);
};

Однако обратите внимание, что вызов preg_match полностью избыточен. Вы уже проверяете, существует ли он в preg_replace! :) Поэтому просто сделайте это:

//If there is a pound sign at the beginning, remove it
$str = preg_replace('/^#/', '', $str);
3 голосов
/ 21 августа 2010

Если вы просто ищете знак фунта в начале строки, почему бы не использовать что-то более простое, чем регулярные выражения?

if ($str[0] == '#')
  $str = substr($str, 1);
1 голос
/ 21 августа 2010

Зачем использовать для этого preg_replace?

echo str_replace("#","",$color);
1 голос
/ 21 августа 2010

@ ennuikiller правильный, экранирование не требуется.Кроме того, вам не нужно проверять совпадение, просто замените его:

<?php
$color = "#ff0000";

$color = preg_replace("/^#/", "", $color);
echo $color;

?>

ВЫХОД

ff0000
0 голосов
/ 21 августа 2010

Вы вызываете две разные функции preg, это может быть чрезмерной оптимизацией, но str_replace('#' , '' , $color) решает вашу проблему быстрее / эффективнее. Я уверен, что другие люди ответят на ваш конкретный вопрос регулярных выражений.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...