espressione regolare

emanuelevt

Utente Attivo
24 Giu 2009
298
0
0
ragazzi esiste un'espressione regolare che unisca le lettere dell'alfabeto toglieno caratteri strani lasciando comunque gli spazi intatti?

del tipo da

c**iao d$a e**ma?nu-e==le

a

ciao da emanuele
 

Grino

Nuovo Utente
12 Dic 2010
4
0
0
Credo che con un

PHP:
$str=preg_replace("/[^\s\w\d]/i","",$str);

ottieni quello che chiedi.

;)
 

emanuelevt

Utente Attivo
24 Giu 2009
298
0
0
grazie mille! Mi sono dimenticato però di dover togliere anche i numeri ... quindi mi potresti postare nuovamente l'espressione reolare per togliere anche i numeri? :dormo:
 

emanuelevt

Utente Attivo
24 Giu 2009
298
0
0
Scusami ancora (anche se ne è passato di tempo ... )

Allora lo scopo è quello che se qualcuno mi inserisce parolacce nel forum del tipo

Va**ff**a**n!*c**u etc..

io unisco i pezzi e sostituisco la parolaccia con degli asterischi (poiché mi sono già costruito una funzione che fa questo)

Però ho dei problemi:

- Se qualcuno inserisce una frase che termina con un punto interrogativo o esclamativo
questo viene eliminato (poiché l'espressione regolare elimina i caratteri particolari)

- Se qualcuno inserisce dei numeri tipo vaff22ancu etc... i numeri non vengono eliminati per andare a costruire la frase

Mi potresti dare un'espressione regolare per risolvere questi due problemi?
 

Eliox

Utente Attivo
25 Feb 2005
4.390
3
0
prova così:
PHP:
$stringa = "vaff22ancu";
$stringa_depurata="";
    for ($i=0;$i<strlen($stringa);$i++){
        if (!is_numeric($stringa{$i}))
            $stringa_depurata=$stringa_depurata.$stringa{$i};
    }
    echo $stringa_depurata;
 

emanuelevt

Utente Attivo
24 Giu 2009
298
0
0
Ottima idea! Ma abbiamo risolto solo uno dei due problemi!

Pensavo però che chi scrive una frase con una parolaccia a differenza di un semplice punto interrogativo è che (scomponendo la frase con explode()) il punto interrogativo ha un strlen pari a 1 mentre le frasi hanno un strlen maggiore di uno quindi potrei fare così:


if(strlen($stringa)==1){// non applico l'espressione regolare}
if(strlen($stringa)>1){// applico l'espressione regolare}

Dici che questo mi potrebbe comportare qualche problema?
 

alessandro1997

Utente Attivo
6 Ott 2009
5.302
1
0
26
Roma
alessandro1997.netsons.org
Ho costruito questa funzione che dovrebbe fare al caso tuo:
PHP:
function sanitize_string($text)
{
	$chars = 'a b c d e f g h i j k l m n o p q r s t u v w x y z A B C D E F G H I J K L M N O P Q R S T U V W X Y Z ';
	$chars .= '! ? , ; . :';
	
	$chars = explode(' ', $chars);
	$words = explode(' ', $text);
	
	$new_text = '';
	
	foreach($words as $word)
	{
		for($i = 0; $i < strlen($word); $i++)
		{
			if(in_array($word[$i], $chars))
				$new_text .= $word[$i];
		}
		
		$new_text .= ' ';
	}
	
	$new_text = substr($new_text, 0, strlen($new_text) - 1);
	return $new_text;
}
Ad esempio, usandola così:
PHP:
$text = 'D4a qu3est0o t3e5st0 v3err4ann0o r1im0oss1i 7tu7t7t1i 1i c4ar4att3er1i 5sp3ec1i4al1i.';
echo sanitize_string($text);
L'output sarà:
Codice:
Da questo test verranno rimossi tutti i caratteri speciali.
Poi non ti resta che controlla se il testo contiene parolacce.
 

Discussioni simili