2011-01-09 10 views
6

Nienawidzę wyrażeń regularnych i miałem nadzieję, że ktoś może pomóc w wyrażeniu regularnym, które będzie używane z preg_replace.preg_replace - usuń niechciane znaki z ciągu znaków, aby zwrócić wartość liczbową

Chcę usunąć niechciane znaki z ciągu, aby zwrócić wartość liczbową za pomocą preg_replace.

Format

Łańcuch może wyglądać następująco:

jakiś tekst £ 100

100 funtów jakiś tekst

jakiś tekst 100 jakiś tekst

Dziękujemy

+1

Więc wszystkie te dają 100, prawda? Co dzieje się z '1abc00'? – BoltClock

+1

Jeszcze lepiej - co powiesz na "1,00 £"? – Kobi

Odpowiedz

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

^wewnątrz [] oznacza niczego z wyjątkiem następujących

Edycja usunięto zbędne +

+1

bardzo wydajna, doskonała odpowiedź –

+0

dlaczego nie użyć '\ D' z ciekawości ...? wiele odpowiedzi na temat korzystania z sieci nie numer, zamiast wbudowanego "nie cyfry" – nicorellius

+0

@nicorellius Napisałem to naprawdę szybko, kiedy odpowiedziałem, tak naprawdę nie myślałem, aby użyć tego, to wszystko, i nie pomyślałem o tym odkąd edytuj, aby użyć \ d. Chociaż jest bardziej czytelny dla osób bez znajomości różnych opcji wyrażeń regularnych. –

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

Daje to '100' dla przykładu Boltclock. – AndreKR

+0

potrzebujesz + w przeciwnym razie zastąpi tylko pierwszy numer nie będący numerem –

+1

Nie, który jest częściowo prawdziwy dla 'preg_match', ale nie dla' preg_replace'. Podobnie jak każdy normalny zamień 'preg_replace' zastępuje każde wystąpienie znaku, który jest" [^ 0-9] 'z niczym, a następnie kontynuuje wyszukiwanie z następnym znakiem. – AndreKR

0

Wypróbuj to:

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

Można również użyć preg_match aby uzyskać numer pierwszy:

preg_match("/\d+/", "SOME TEXT £100", $matches); 
$number = $matches[0]; 
8
$l = preg_replace("/[^A-Z0-9a-z\w ]/u", '', $l); 

Działa z UTF-8, zezwól tylko na A-Z a-z 0-9 łwóc ... itd.

Powiązane problemy