2011-12-13 32 views
12

Ben bir alt çizgi (_) ile olmayan tüm harf ve sayı karakterlerini yani /&%#$ vb değiştirip "" boş (hiçbir alt çizgi) ile tüm ' (tek tırnak) değiştirin isteyen.PHP preg_replace özel karakterler

Yani (çift tırnak görmezden) "There_wouldnt_be_any" haline gelecek "herhangi de olmazdı".

ben reg dolayısıyla ifadeler gönderince yararsız duyuyorum.

Alkış

cevap

26
$newstr = preg_replace('/[^a-zA-Z0-9\']/', '_', "There wouldn't be any"); 
$newstr = str_replace("'", '', $newstr); 

biraz daha net kod yapmak için iki ayrı satırlarda koydu.

Not: Unicode desteği arıyorsanız, aşağıda Filip'in cevaba bakınız. A-z'a ek olarak harf olarak kaydedilen tüm karakterlerle eşleşecektir.

2

iki adımda bunu:

  1. this regex ile harfi değil karakterleri değiştirmek:

    [\"\']

  2. :

    [\/\&%#\$]

  3. this regex ile tırnak yerine

ve kullanımı preg_replace:

$stringWithoutNonLetterCharacters = preg_replace("/[\/\&%#\$]/", "_", $yourString); 
$stringWithQuotesReplacedWithSpaces = preg_replace("/[\"\']/", " ", $stringWithoutNonLetterCharacters); 
28

yazısıyla "Eğer olmayan harfleri ve sayıları" den fazla [A-Za-z0-9] hariç (yani. åäö gibi harfler göz önünde bulundurularak) ve UTF-8 dizgileri \p{L} ve \p{N}'un doğru şekilde ele alınabilmesi için yardımcı olacaktır.

  1. \p{N} herhangi bir "Numarası"
  2. \p{L}
    • Küçük harf harf
    • Değiştirici Harf
    • Diğer harf
    • içeren herhangi bir " Harf Karakter" eşleşir eşleşir
    • Başlığı harf
    • Büyük harf harf

Belgeleme dosyamın ßällistic olarak PHP: Unicode Character Properties


$data = "Thäre!wouldn't%bé#äny"; 

$new_data = str_replace ("'", "", $data); 
$new_data = preg_replace ('/[^\p{L}\p{N}]/u', '_', $new_data); 

var_dump (
    $new_data 
); 

çıkış

string(23) "Thäre_wouldnt_bé_äny" 
+0

yüklemeden sonra ßällistic aldı. PCRE'nin (düzenli ifade motoru) sürümünü sahiptir @erdomester – erdomester

+0

UTF-8 desteği ile derlenmiştir? –

+0

Seni anladığımdan emin değilim. Dosya, BOM içermeyen UTF-8 olarak kodlanmıştır. Ben senin sorunun sağlanan kod Snippet'te ama adını dize sınırlamak istiyorsanız neyi FilipRoséen-refp @ tarayıcınızda – erdomester