2011-06-06 15 views
13

¿Es posible analizar cadenas de camello en algo más legible.Cómo analizar Camel Case para una cadena humana legible?

por ejemplo:

  • LocalBusiness = Local Business
  • CivicStructureBuilding = Estructura Cívico Edificio
  • getUserMobilePhoneNumber = Obtener número de teléfono móvil del usuario
  • bandGuitar1 = guitarra de la banda 1

ACTUALIZAR

El uso de expresiones regulares simshaun ejemplo logré separar los números de texto con esta regla:

function parseCamelCase($str) 
{ 
    return preg_replace('/(?!^)[A-Z]{2,}(?=[A-Z][a-z])|[A-Z][a-z]|[0-9]{1,}/', ' $0', $str); 
} 

//string(65) "customer ID With Some Other JET Words With Number 23rd Text After" 
echo parseCamelCase('customerIDWithSomeOtherJETWordsWithNumber23rdTextAfter'); 

Respuesta

32

Hay algunos ejemplos en los comentarios de los usuarios de str_split en el manual de PHP.

De Kevin:

<?php 
$test = 'CustomerIDWithSomeOtherJETWords'; 

preg_replace('/(?!^)[A-Z]{2,}(?=[A-Z][a-z])|[A-Z][a-z]/', ' $0', $test); 


Y aquí es algo que escribí para cumplir con los requisitos de su mensaje:

<?php 
$tests = array(
    'LocalBusiness' => 'Local Business', 
    'CivicStructureBuilding' => 'Civic Structure Building', 
    'getUserMobilePhoneNumber' => 'Get User Mobile Phone Number', 
    'bandGuitar1' => 'Band Guitar 1', 
    'band2Guitar123' => 'Band 2 Guitar 123', 
); 

foreach ($tests AS $input => $expected) { 
    $output = preg_replace(array('/(?<=[^A-Z])([A-Z])/', '/(?<=[^0-9])([0-9])/'), ' $0', $input); 
    $output = ucwords($output); 
    echo $output .' : '. ($output == $expected ? 'PASSED' : 'FAILED') .'<br>'; 
} 
+0

gracias, pero ¿es posible separar los números? – Nazariy

+0

Claro. Editado – simshaun

+0

@dynamic ... alguna sugerencia? – greaterKing

0

utilizar una expresión de expresiones regulares. En java algo como esto

String[] r = s.split("(?=\\p{Lu})"); 

que obtiene la mayor parte del camino, pero no para getUserMobilePhoneNumber = Obtener número de teléfono móvil del usuario

+0

¿usaría 'ucwords()' en el resultado para cruzar la línea de meta? – preinheimer

+1

¿Por qué esta respuesta es downvoted? De acuerdo, no es una solución completa, pero es un ejemplo de enfoque más inteligente que también admitirá otros alfabetos. 'mb_convert_case (preg_replace ('~ (\ p {Ll}) (\ p {Lu}) ~ u', '$ {1} $ {2}', 'someCamelCaseText'), MB_CASE_TITLE," UTF-8 " ; ' Debería funcionar para alfabeto latino, cirílico, griego o cualquier otro alfabeto que tenga una noción de letra mayúscula, compatible con el enfoque de CamelCase. – Docal

Cuestiones relacionadas