preg_replace - istenmeyen karakterleri bırakarak

4 Cevap php

Ben bir dize var:

$string = "Hello World!";

Bir URL dostu etiketi çevirmek istiyorum, ve bunu yapmak için bir işlev geliştirdik:

function stripJunk($string){
    $string = str_replace(" ", "-", $string);
    $string = preg_replace("/[^a-zA-Z]\s/", "", $string);
    $string = strtolower($string);
    return $string;
}

Yukarıda içinden benim $string çalıştırdığınızda, ancak, ben şu olsun:

$string = "hello-world!";

Bu benim preg_replace ile kaymasını karakterler den ne anlamak, onlar olmamalı olsa bile, var gibi görünüyor.

Bu gibi okumalısınız:

$string = "hello-world";

Burada neler oluyor? (Bu kolay peasy limon squeasy olmalı!)

Edit 1: Ben düzenli ifadeler başlayanlar şeyler vardı farkında değildi, ama ne olursa olsun. Ayrıca, benim dize \ s kaldırarak istenilen sonucu vermez.

İstenilen sonuç:

  1. Tüm alanlarda tire dönüştürülür.
  2. AZ veya 0-9 değil kalan tüm karakterler kaldırılır.
  3. Dize sonra küçük harflere dönüştürülür.

Edit 2+: Benim kodu biraz temizledik.

4 Cevap

Benim için aşağıdaki sadece çalışıyor:

function stripJunk($string){
    $string = str_replace(" ", "-", trim($string));
    $string = preg_replace("/[^a-zA-Z0-9-]/", "", $string);
    $string = strtolower($string);
    return $string;
}

Lütfen desen sonunda \ s sadece hemen bir boşluk karakteri tarafından takip edilmektedir alfabetik olmayan karakterler yerini alacak anlamına gelir. Boşluk da korunmuş ve daha sonra bir tire ile değiştirilebilir böylece muhtemelen \ s köşeli parantez içinde istiyorum.

Ayrıca sayıları izin vermek istiyorsanız köşeli parantez içine 0-9 eklemeniz gerekir.

Örneğin:

<?php

$string = "Hello World!";

function stripJunk($string){
    $string = preg_replace("/[^a-zA-Z0-9\s]/", "", $string);
    $string = str_replace(" ", "-", $string);
    $string = strtolower($string);
    return $string;
}

echo stripJunk($string);

Sen önemsiz kaldırmak için arka arkaya düzenli ifadeleri kullanabilirsiniz:

<?php

function strip_junk ($string) {

  // first, strip whitespace; and replace every non-alphabetic character by a dash
  $string = preg_replace("/[^a-z0-9-]/u", "-", strtolower(trim($string)));

  // second, remove double dashes
  $string = preg_replace("/-+/u", "-", $string);

  // finally, remove leading and trailing dashes
  $string = preg_replace("/^-*|-*$/u", "", $string);

  return $string;

}

?>

Bu, mutlu PHP'ing hile yapmak gerekir!

Ne bu konuda?

preg_replace("/[.\n\r][^a-zA-Z]/", "", $string);

Bu işe yaramazsa:

preg_replace("/[.\n\r^a-zA-Z]/", "", $string);

Bu çalışır mı?