Как заменить точки, пробелы и запятые дефисом и избежать двойного дефиса с помощью php? - PullRequest
0 голосов
/ 27 сентября 2018

Когда я заменяю пробелы, точки и запятые строки, иногда случается, что я получаю двойные дефисы.

Например, check out the 1. place превращается в check-out-the-1--place

Как мне избежатьтот?Я хочу, чтобы это было check-out-the-1-place - чтобы между каждым словом был только один дефис.Вот мой код:

str_replace([' ', ',', '.','?'], '-', strtolower($pathname));

Сейчас я знаю, почему он возвращает двойные дефисы, но я не знаю, как с этим справиться.

Может кто-нибудь мне помочь

Ответы [ 2 ]

0 голосов
/ 27 сентября 2018

Как мне этого избежать?Я хочу, чтобы это было «проверка на месте», чтобы между каждым словом был только один дефис.Вот мой код:

В то время как ответ Мухаммеда - почти , здесь есть более полно работающий регулярное выражение PCRE метод и объяснениекак это работает, поэтому вы можете использовать его по своему усмотрению:

$str = trim(strtolower($pathname));
$newStr = preg_replace('/[\s.,-]+/', '-', $str);

Как это работает:

  • Соответствует одному символу, представленному в списке ниже [\s.,-]+
    • + Квантификатор Соответствует одному и неограниченному раз, столько раз, сколько возможно, возвращая при необходимости (жадный)
    • \s соответствует любому символу пробела (равнона [\r\n\t\f\v])
    • .,- соответствует одному символу в списке .,- (с учетом регистра)
    • Тире - должно идти в конце из набора [].

Результаты:

Это: проверить 1. место

Становится:

check-out-the-1-place

И

Это: проверить - 1. место

Становится

check-out-the-1-place


Далее:

Я бы пошел дальше и предположил, что вы используете это для URL-слага ( а что?! );извлеките из строки все не алфавитно-цифровых символов и замените их одним - в соответствии с типичными ссылками веб-сайта.

 $newStr = preg_replace('/[^a-z0-9]+/i', '-', $str);

Как это работает:

  • Соответствует одному символу НЕ (^), присутствующий в списке ниже [a-z0-9]+
    • + Квантификатор Соответствует от один и неограниченный раз, столько раз, сколько возможно, возвращая при необходимости (жадный)
    • a-z один символ в диапазоне между (индекс 97) и z (индекс 122) (с учетом регистра)
    • 0-9 один символ в диапазоне от 0 (индекс 48) до 9 (индекс 57) (с учетом регистра)
    • i в конце означает, что решения не учитывают регистр .

Пример:

проверить- нет.!1. Место

Становится:

check-out-the-1-Place

0 голосов
/ 27 сентября 2018

Вместо этого можно использовать preg_replace() и пользовательское регулярное выражение для выбора нескольких конкретных символов.

$newStr = preg_replace("/[\s.,]+/", "-", $str)

Проверить результат в demo

...