pulse Skrevet 18. januar 2008 Skrevet 18. januar 2008 (endret) Sitter og sliter litt med preg_replace (vet ikke om det er rette løsningen engang) og prøver og lære meg litt om regex. Det jeg ønsker og komme frem til er en sak som fjerner alt som ikke er alfabetisk eller tall (a-zA-Z0-9) men også æøåÆØÅéEÉßá osv... men den skal også si ifra om den faktisk fjernet noe. Har sitte og lest litt, og testet litt, men ingenting jeg skriver blir rett. Det blir rett og slett temmelig galt Noen som kan hjelpe meg litt på vei, eventuelt har noen gode linker til sider som er gode til og fortelle om regex, php, og funksjoner som benytter seg av regex? (Har googlet litt, men ikke funnet noe god guide. Hadde en i bookmark før, men mista den dessverre). Edit: Fikke en løsning hos norskwebforum: http://norskwebforum.no/viewtopic.php?f=50&t=37968 Endret 18. januar 2008 av pulse
Peter Skrevet 18. januar 2008 Skrevet 18. januar 2008 Snudde på flisa og hentet ut det du vil ha, istedenfor å fjerne det du ikke vil ha. For å finne ut om noe har skjedd kan du bare sammenligne det du henter ut med orginal input og sjekke om de er like (f.eks. med strcmp()) <?php $str = 'ljkj,jfsvhfhgdjj%&/&/#(/&%0985369747)'; $matches = array(); preg_match_all('/([\w\d])/', $str, $matches); print_r(implode('',$matches[0])); ?>
pulse Skrevet 18. januar 2008 Forfatter Skrevet 18. januar 2008 Får det ikke til og funke. Virker som om \w er det samme som [a-zA-Z] Tenkte kanskje dette hadde noe med at jeg bruker utf-8, så jeg laget ett nytt script som bruker iso-8859-1, men samme feil uansett hvilket tegnsett jeg bruker. <?php ini_set('error_reporting', E_ALL); date_default_timezone_set('Europe/Oslo'); header("Content-Type: text/html;charset=iso-8859-1"); ?> <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd"> <html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en" lang="en"> <head> <meta http-equiv="content-type" content="text/html; charset=iso-8859-1" /> <title></title> </head> <body> <?php $string = "abc æøå 123 éßâ %&' -,."; echo '<p>'.preg_replace('/[^\w\d]/', '', $string).'</p>'; $str = 'abc æøå 123 éßâ %&" -,.'; $matches = array(); preg_match_all('/([\w\d])/', $str, $matches); echo '<p>'; print_r(implode('',$matches[0])); echo '</p>'; ?> </body> </html>
Peter Skrevet 18. januar 2008 Skrevet 18. januar 2008 (endret) PHP er ikke så glad i utf8, så du må slenge inn u-modifier. For å få case-insensitive treff bruker du i-modifier: echo preg_replace('/[^\w\d]/ui', '', $str); <?php $str = 'abc æøå 123 éßâ %&" -,.'; $matches = array(); echo preg_replace('/[^\pL\d]/ui', '', $str); ?> EDIT: Endret fra \w til \pL Endret 19. januar 2008 av Peter
pulse Skrevet 18. januar 2008 Forfatter Skrevet 18. januar 2008 Du kan gjøre den case-insensitiv med i-modifier:echo preg_replace('/[^\w\d]/i', '', $str); Problemet er ikke om den er case insenitiv. Problemet er at den fjerner æøå og andre tegn som ð é ä osv...
Anbefalte innlegg
Opprett en konto eller logg inn for å kommentere
Du må være et medlem for å kunne skrive en kommentar
Opprett konto
Det er enkelt å melde seg inn for å starte en ny konto!
Start en kontoLogg inn
Har du allerede en konto? Logg inn her.
Logg inn nå