проблема регулярного экспресса с 1 строкой символов - PullRequest
0 голосов
/ 09 ноября 2018

Я допускаю только значения alpha-numeric, _ & - в строке и удаляю все остальные символы. Работает нормально, но когда строка размером 1 символ (не имеет значения alphabet или numeric или _ или -), я получаю пустое значение вместо одного чартера.

Вот пример кода

$str = 1;
$str = preg_replace('/^[a-zA-Z0-9_-]$/', '', $str);
var_dump($str);

или

$str = 'a';
$str = preg_replace('/^[a-zA-Z0-9_-]$/', '', $str);
var_dump($str);

Я также протестировал несколько версий PHP

1 Ответ

0 голосов
/ 09 ноября 2018

Вы удаляете любые символы кроме букв ASCII, цифр, _ и - в любом месте строки. Вам необходимо удалить якоря и преобразовать класс положительных символов в отрицательный:

$str = preg_replace('/[^\w-]+/', '', $str);

См. PHP-демо онлайн и regex demo .

Детали

  • [^ - начало класса с отрицанием символов
    • \w - слово char: буква, цифра или _
    • - - дефис
  • ] - конец класса символов
  • + - квантификатор: 1 или более повторений.
...