Gå til innhold

[løst] Fjerne innput som ikke er alfabet eller tall?


Anbefalte innlegg

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 :p

 

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 av pulse
Lenke til kommentar
Videoannonse
Annonse

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]));
?>

Lenke til kommentar

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>

 

 

Lenke til kommentar

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 av Peter
Lenke til kommentar

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 konto

Logg inn

Har du allerede en konto? Logg inn her.

Logg inn nå
×
×
  • Opprett ny...