2011-01-09 23 views
6

Düzenli ifadelerden nefret ediyorum ve birisinin preg_replace ile kullanılacak bir regualar ifadeye yardımcı olabileceğini umuyordum.preg_replace - dizgeden istenmeyen karakterleri dizgeden döndürmek için

Preg_replace kullanarak yalnızca sayısal bir değer döndürmek için istenmeyen karakterleri bir dizeden çıkarmak istiyorum.

BAZI METİN £ 100

£ 100 BAZI METİN

BAZI METİN 100 BAZI METİN

çok teşekkür ederiz

+1

Yani tüm bu verim 100, değil mi? 1abc00’e ne olacak? – BoltClock

+1

Daha iyisi - peki ya £ 1,00? – Kobi

cevap

16
$NumericVal = preg_replace("/[^0-9]/","",$TextVariable); 

^+

+1

çok verimli, mükemmel yanıt –

+0

neden '' '' '' '' '' '' meraktan çıkmadığını görüyoruz? web üzerinde birçok cevaplar yerleşik olmayan "değil haneli" yerine, çok sayıdaki cevaplar – nicorellius

+0

@nicorellius Cevap yazdığımda bu gerçekten çabucak yazdım, gerçekten hepsini kullanmayı düşünmedim ve bu yana kullanmak için düzenleyin \ d. Farklı regex seçenekleri hakkında bilgi sahibi olmayan insanlar için daha okunabilir olsa da. –

0
preg_replace('/[^0-9]/','',$text); 
+0

Bu, Boltclock örneğinin de "100" değerini verir. – AndreKR

+0

+ gerekiyorsa aksi takdirde sadece 'preg_match' için değil, preg_replace' için değil, –

+1

No numaralı ilk numarayı değiştirecektir. Herhangi bir normal yerine 'preg_replace' gibi bir karakterin varlığını [^ 0-9]' hiçbir şeyle değiştirmez ve sonraki karakteri ile aramaya devam eder. – AndreKR

0

şu şekildedir:

dize biçimi olabilir Bunu deneyin:

preg_replace("/\D+/", "", "SOME TEXT £100") 

Ayrıca birinci numarası almak için preg_match kullanabilirsiniz:

preg_match("/\d+/", "SOME TEXT £100", $matches); 
$number = $matches[0]; 
[] gereksiz kaldırıldı aşağıdaki

Düzenleme dışında bir anlamı içindeki

8
$l = preg_replace("/[^A-Z0-9a-z\w ]/u", '', $l); 

İşçi cadısı UTF-8, sadece A-Z a-z 0-9 łwóc ... vs'ye izin ver

İlgili konular