Wie konvertiere ich einen String mit Klasse in einen Selektor, auch wenn er viele Leerzeichen zwischen Klassen enthält?

Eingabedaten:

$html_classes = 'class1    class2  class3 ';

Notwendiges Ergebnis:

.class1.class2.class3

Dieses Beispiel ist nicht geeignet, da zwischen den Klassen möglicherweise viele Leerzeichen vorhanden sind

$result = '.' . str_replace( ' ', '.', $html_classes )
3
Alex Vasilyev 19 Jän. 2019 im 01:34

5 Antworten

Beste Antwort

Versuche dies:

<?php
$html_classes = 'class1    class2  class3 ';
$parts = explode(" ", $html_classes);
$results = "";
foreach($parts as $c){
    if($c != ""){
        $results .= "." . $c;
    }
}
echo $results;
?>

Die Ergebnisse, die ich bekam:

.class1.class2.class3

Ich hoffe, das hilft.

1
Twisty 18 Jän. 2019 im 22:41

Ersetzen Sie einfach alle zusätzlichen Leerzeichen zuerst durch Singles. Führen Sie trim () aus, um Leerzeichen am Anfang und am Ende zu entfernen.

$html_classes = 'class1    class2  class3 ';
$html_classes = trim(preg_replace('/\s+/',' ',$html_classes));
$result = '.' . str_replace(' ','.',$html_classes);
2
amedv 18 Jän. 2019 im 23:00

Mein Vorschlag:

<?php
$html_classes = 'class1    class2  class3 ';
$result = '.' . preg_replace('/\s+/', '.', trim($html_classes));
echo $result;
?>

Reguläre Ausdrücke:

  • \ s ist ein Leerzeichen.

  • + bedeutet ein oder mehrere Vorkommen.

PHP (von http://php.net):

1
Christoph 18 Jän. 2019 im 23:02

Sie können dies ohne zusätzliches Trimmen oder Verketten tun. Suchen Sie Nicht-Leerzeichen, die von null oder mehr Leerzeichen umgeben sind, und ersetzen Sie diese Übereinstimmungen durch den Nicht-Leerzeichen-Teil der Übereinstimmung, dem ein Punkt vorangestellt ist.

$html_classes = preg_replace('/\s*(\S+)\s*/', '.$1', $html_classes);
1
Don't Panic 18 Jän. 2019 im 23:54

Die Antwort ist so einfach wie ein einzelner Regex-basierter Ersatzanruf:

<?php
$input = 'class1    class2  class3  ';
$output = preg_replace('/\s*([\w\d]+)\s*/', '.${1}', $input);
print_r($output);

Die Ausgabe ist offensichtlich:

.class1.class2.class3
0
arkascha 19 Jän. 2019 im 08:23