Domanda

Sto cercando di trovare il modo migliore per farlo in PHP:

Devo analizzare una stringa.

Alcuni personaggi sono vietati (cioè: virgola, semicomma, spazio, percentuale ... ma può essere qualsiasi personaggio che desidero, non solo segni di punteggiatura!)

Vorrei stampare una riga per ogni carattere proibito nella stringa:

$string = "My taylor, is rich%";

Dopo aver analizzato, voglio stampare:

Character COMMA is forbidden
Character PERCENTAGE is forbidden

La sumum potrebbe essere quella di avere una sola riga per più errori con lo stesso carattere.

Alcuni di voi hanno riscontrato un tale problema?

Ho provato a regex e strpo, ma senza risultati significativi.

È stato utile?

Soluzione

Uso preg_match_all.

$forbidden = "/[,;%]/";
$string = "My taylor, is rich%; he is breaking my bank, natch";
$matches = null;
preg_match_all($forbidden, $string, $matches);
$chars = $matches ? array_unique($matches[0]) : array();

foreach ($chars as $char) {
    echo "Character {$char} is forbidden\n";
}

L'output di quanto sopra è:

Character , is forbidden
Character % is forbidden
Character ; is forbidden

Il preg_match_all restituirà tutti i casi del $forbidden Regex. Puoi regolare i personaggi in quel regex come ritieni opportuno. Il array_unique eliminerà i duplicati.

Infine, sto solo producendo i personaggi stessi nell'output. Se vuoi parole come "virgola", "percentuale", ecc ..., dovrai creare un hash per questo.

Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top