Risposte:
Sembra quasi che tu sapessi già cosa volevi fare, in pratica lo definivi una regex.
preg_replace("/[^A-Za-z0-9 ]/", '', $string);
preg_replace('/[^A-Za-z0-9 ]/', '', $string);
Per i caratteri Unicode, è:
preg_replace("/[^[:alnum:][:space:]]/u", '', $string);
\w
include \d
e quindi \d
non è necessario. Inoltre, questo è sbagliato perché lascerà anche i trattini bassi nella stringa risultante (che è anche inclusa in \w
).
i
bandiera è davvero necessaria qui poiché [:alnum:]
copre già entrambi i casi?
L'espressione regolare è la tua risposta.
$str = preg_replace('/[^a-z\d ]/i', '', $str);
i
acronimo di case insensitive.^
significa che non inizia con. \d
corrisponde a qualsiasi cifra. a-z
corrisponde a tutti i caratteri tra a
e z
. A causa del i
parametro non è necessario specificare a-z
e A-Z
.\d
c'è uno spazio, quindi gli spazi sono ammessi in questa regex.ecco una regex davvero semplice per questo:
\W|_
e usato come serve (con un /
delimitatore di barra).
preg_replace("/\W|_/", '', $string);
Provalo qui con questo fantastico strumento che spiega cosa sta facendo il regex:
/u
bandiera, altrimenti vengono rimosse anche le lettere non ascii.
[\W_]+
Se devi supportare altre lingue, anziché la tipica AZ, puoi usare quanto segue:
preg_replace('/[^\p{L}\p{N} ]+/', '', $string);
[^\p{L}\p{N} ]
definisce una classe di caratteri negata (corrisponderà a un carattere non definito) di:
\p{L}
: una lettera da qualsiasi lingua.\p{N}
: un carattere numerico in qualsiasi script.
: un personaggio spaziale.+
corrisponde avidamente alla classe del personaggio tra 1 e un numero illimitato di volte.Ciò conserverà lettere e numeri di altre lingue e script, nonché AZ:
preg_replace('/[^\p{L}\p{N} ]+/', '', 'hello-world'); // helloworld
preg_replace('/[^\p{L}\p{N} ]+/', '', 'abc@~#123-+=öäå'); // abc123öäå
preg_replace('/[^\p{L}\p{N} ]+/', '', '你好世界!@£$%^&*()'); // 你好世界
Nota: questa è una domanda molto vecchia, ma comunque rilevante. Sto rispondendo esclusivamente per fornire informazioni supplementari che potrebbero essere utili ai futuri visitatori.
[\W_]+
$string = preg_replace("/[\W_]+/u", '', $string);
Seleziona tutto non AZ, az, 0-9 ed eliminalo.
Vedi esempio qui: https://regexr.com/3h1rj
\W
è l'inverso dei \w
quali sono personaggi A-Za-z0-9_
. Quindi \W
abbinerà qualsiasi personaggio che non lo è A-Za-z0-9_
e li rimuoverà. Il []
è un limite di set di caratteri . Il +
è ridondante su un confine di set di caratteri, ma normalmente significa 1 o più caratteri. Il u
flag espande l'espressione per includere il supporto caratteri Unicode, il che significa che non rimuoverà i caratteri oltre il codice carattere 255 come ª²³µ
. Esempio di vari usi 3v4l.org/hSVV5 con caratteri Unicode e ASCII.
preg_replace("/\W+/", '', $string)
Puoi provarlo qui: http://regexr.com/
Stavo cercando anche la risposta e la mia intenzione era quella di pulire ogni non alfa e non avrei dovuto avere più di uno spazio.
Quindi, ho modificato la risposta di Alex a questo, e questo funziona per me.
preg_replace('/[^a-z|\s+]+/i', ' ', $name)
La regex di cui sopra si è trasformata sy8ed sirajul7_islam
in sy ed sirajul islam
Spiegazione: regex controllerà NESSUNA dalla a alla z nel caso insensibile o più di uno spazio bianco, e verrà convertito in un singolo spazio.
Puoi dividere la stringa in caratteri e filtrarla.
<?php
function filter_alphanum($string) {
$characters = str_split($string);
$alphaNumeric = array_filter($characters,"ctype_alnum");
return join($alphaNumeric);
}
$res = filter_alphanum("a!bc!#123");
print_r($res); // abc123
?>
preg_replace()
chiamata.