String mit Bindestrichen in camelCase umwandeln

Lesezeit: 3 Minuten

Benutzer-Avatar
Kirk Ouimet

Ich möchte einen String wie diesen nehmen: ‘this-is-a-string’ und ihn in diesen konvertieren: ‘thisIsAString’:

function dashesToCamelCase($string, $capitalizeFirstCharacter = false) {
    // Do stuff

    return $string;
}

Ich muss “kebab-case” in “camelCase” umwandeln.

Benutzer-Avatar
webbiedave

Keine Regex oder Rückrufe erforderlich. Fast die gesamte Arbeit kann mit ucwords erledigt werden:

function dashesToCamelCase($string, $capitalizeFirstCharacter = false) 
{

    $str = str_replace(' ', '', ucwords(str_replace('-', ' ', $string)));

    if (!$capitalizeFirstCharacter) {
        $str[0] = strtolower($str[0]);
    }

    return $str;
}

echo dashesToCamelCase('this-is-a-string');

Wenn Sie PHP >= 5.3 verwenden, können Sie lcfirst anstelle von strtolower verwenden.

Aktualisieren

Ein zweiter Parameter wurde zu ucwords in PHP 5.4.32/5.5.16 hinzugefügt, was bedeutet, dass wir nicht zuerst die Bindestriche in Leerzeichen ändern müssen (danke an Lars Ebert und PeterM für den Hinweis). Hier ist der aktualisierte Code:

function dashesToCamelCase($string, $capitalizeFirstCharacter = false) 
{

    $str = str_replace('-', '', ucwords($string, '-'));

    if (!$capitalizeFirstCharacter) {
        $str = lcfirst($str);
    }

    return $str;
}

echo dashesToCamelCase('this-is-a-string');

  • if (!$capitalizeFirstCharacter) { $str = lcfirst($str); }

    – AVProgrammierer

    19. Juli 2013 um 6:51 Uhr

  • Beachten Sie, dass ucwords akzeptiert tatsächlich ein Trennzeichen als zweiten Parameter (siehe Antwort von PeterM), also einer der str_replace Anrufe wären unnötig.

    – Lars Ebert

    14. Februar 2017 um 12:14 Uhr

  • Danke für die Info @LarsEbert. Ich habe die Antwort aktualisiert.

    – Webbiedave

    16. Februar 2017 um 23:08 Uhr

  • Die Bedingung kann mit Hilfe des ternären Operators umgeschrieben werden $str = ! $capitalizeFirstCharacter ? lcfirst($str) : $str; hauptsächlich für die Lesbarkeit (obwohl einige anderer Meinung sein mögen) und/oder die Reduzierung der Codekomplexität.

    – Chris Athanasiadis

    27. Mai 2020 um 7:38 Uhr

Benutzer-Avatar
PeterM

Das geht ganz einfach mit uwords die akzeptiert Trennzeichen als Parameter:

function camelize($input, $separator="_")
{
    return str_replace($separator, '', ucwords($input, $separator));
}

HINWEIS: Benötigen Sie PHP mindestens 5.4.32, 5.5.16

  • Dies gibt so etwas wie CamelCase zurück – wenn Sie möchten, dass dies so etwas wie CamelCase ist, dann: return str_replace($separator, '', lcfirst(ucwords($input, $separator)));

    – Jeff S.

    16. November 2015 um 4:09 Uhr


  • ucwords hat einen zweiten Parameter delimiterAlso str_replace("_", "", ucwords($input, "_")); ist gut genug (in den meisten Fällen: P

    – wbsnail

    23. Mai 2017 um 8:42 Uhr

  • Zur Verdeutlichung: Die Antwort von PeterM kommt zurück oberes Kamelgehäuse (= PascalCase). Der Kommentar von Jeff S. kommt zurück unteres Kamelgehäuse (= Dromedarfall).

    – Dan

    18. Mai 2021 um 8:02 Uhr


  • So oder so. Das OP brauchte eine Lösung für Kebab-Fall, nicht für Schlangenfall.

    – der König2

    19. September 2021 um 9:54 Uhr

Benutzer-Avatar
Doppeljosch

Überladener Einzeiler, mit Dokumentenblock…

/**
 * Convert underscore_strings to camelCase (medial capitals).
 *
 * @param {string} $str
 *
 * @return {string}
 */
function snakeToCamel ($str) {
  // Remove underscores, capitalize words, squash, lowercase first.
  return lcfirst(str_replace(' ', '', ucwords(str_replace('_', ' ', $str))));
}

  • Dies wird zurückkehren null

    – PeterM

    9. Januar 2018 um 18:29 Uhr

  • Die Funktion fehlte a return …aktualisiert, danke. Hier ist ein Link, um dies zu testen 3v4l.org/YBHPd

    – Doppeljosch

    10. Januar 2018 um 23:06 Uhr

  • Wie können wir für ein Array in einer Zeile verarbeiten?

    – Hugo-dev

    14. Dezember 2021 um 19:32 Uhr

das ist meine Variante, wie ich damit umgehen soll. Hier habe ich zwei Funktionen, die erste camelCase verwandelt alles in ein cameCase und es wird nichts durcheinander bringen, wenn die Variable bereits cameCase enthält. Zweite uncamelCase verwandelt camelCase in einen Unterstrich (großartiges Feature beim Umgang mit Datenbankschlüsseln).

function camelCase($str) {
    $i = array("-","_");
    $str = preg_replace('/([a-z])([A-Z])/', "\\1 \\2", $str);
    $str = preg_replace('@[^a-zA-Z0-9\-_ ]+@', '', $str);
    $str = str_replace($i, ' ', $str);
    $str = str_replace(' ', '', ucwords(strtolower($str)));
    $str = strtolower(substr($str,0,1)).substr($str,1);
    return $str;
}
function uncamelCase($str) {
    $str = preg_replace('/([a-z])([A-Z])/', "\\1_\\2", $str);
    $str = strtolower($str);
    return $str;
}

testen wir beides:

$camel = camelCase("James_LIKES-camelCase");
$uncamel = uncamelCase($camel);
echo $camel." ".$uncamel;

Im Laravel-Einsatz Str::camel()

use Illuminate\Support\Str;

$converted = Str::camel('foo_bar');

// fooBar

Benutzer-Avatar
Paige Rüten

Ich würde wahrscheinlich verwenden preg_replace_callback()so was:

function dashesToCamelCase($string, $capitalizeFirstCharacter = false) {
  return preg_replace_callback("/-[a-zA-Z]/", 'removeDashAndCapitalize', $string);
}

function removeDashAndCapitalize($matches) {
  return strtoupper($matches[0][1]);
}

Benutzer-Avatar
Sparkup

Du schaust nach preg_replace_callbackSie können es wie folgt verwenden:

$camelCase = preg_replace_callback('/-(.?)/', function($matches) {
     return ucfirst($matches[1]);
}, $dashes);

1355980cookie-checkString mit Bindestrichen in camelCase umwandeln

This website is using cookies to improve the user-friendliness. You agree by using the website further.

Privacy policy