1<?php 2/** 3 * Part of the Joomla Framework String Package 4 * 5 * @copyright Copyright (C) 2005 - 2020 Open Source Matters, Inc. All rights reserved. 6 * @license GNU General Public License version 2 or later; see LICENSE 7 */ 8 9namespace Joomla\String; 10 11/** 12 * Joomla Framework String Normalise Class 13 * 14 * @since 1.0 15 */ 16abstract class Normalise 17{ 18 /** 19 * Method to convert a string from camel case. 20 * 21 * This method offers two modes. Grouped allows for splitting on groups of uppercase characters as follows: 22 * 23 * "FooBarABCDef" becomes array("Foo", "Bar", "ABC", "Def") 24 * "JFooBar" becomes array("J", "Foo", "Bar") 25 * "J001FooBar002" becomes array("J001", "Foo", "Bar002") 26 * "abcDef" becomes array("abc", "Def") 27 * "abc_defGhi_Jkl" becomes array("abc_def", "Ghi_Jkl") 28 * "ThisIsA_NASAAstronaut" becomes array("This", "Is", "A_NASA", "Astronaut")) 29 * "JohnFitzgerald_Kennedy" becomes array("John", "Fitzgerald_Kennedy")) 30 * 31 * Non-grouped will split strings at each uppercase character. 32 * 33 * @param string $input The string input (ASCII only). 34 * @param boolean $grouped Optionally allows splitting on groups of uppercase characters. 35 * 36 * @return string The space separated string. 37 * 38 * @since 1.0 39 */ 40 public static function fromCamelCase($input, $grouped = false) 41 { 42 return $grouped 43 ? preg_split('/(?<=[^A-Z_])(?=[A-Z])|(?<=[A-Z])(?=[A-Z][^A-Z_])/x', $input) 44 : trim(preg_replace('#([A-Z])#', ' $1', $input)); 45 } 46 47 /** 48 * Method to convert a string into camel case. 49 * 50 * @param string $input The string input (ASCII only). 51 * 52 * @return string The camel case string. 53 * 54 * @since 1.0 55 */ 56 public static function toCamelCase($input) 57 { 58 // Convert words to uppercase and then remove spaces. 59 $input = self::toSpaceSeparated($input); 60 $input = ucwords($input); 61 $input = str_ireplace(' ', '', $input); 62 63 return $input; 64 } 65 66 /** 67 * Method to convert a string into dash separated form. 68 * 69 * @param string $input The string input (ASCII only). 70 * 71 * @return string The dash separated string. 72 * 73 * @since 1.0 74 */ 75 public static function toDashSeparated($input) 76 { 77 // Convert spaces and underscores to dashes. 78 $input = preg_replace('#[ \-_]+#', '-', $input); 79 80 return $input; 81 } 82 83 /** 84 * Method to convert a string into space separated form. 85 * 86 * @param string $input The string input (ASCII only). 87 * 88 * @return string The space separated string. 89 * 90 * @since 1.0 91 */ 92 public static function toSpaceSeparated($input) 93 { 94 // Convert underscores and dashes to spaces. 95 $input = preg_replace('#[ \-_]+#', ' ', $input); 96 97 return $input; 98 } 99 100 /** 101 * Method to convert a string into underscore separated form. 102 * 103 * @param string $input The string input (ASCII only). 104 * 105 * @return string The underscore separated string. 106 * 107 * @since 1.0 108 */ 109 public static function toUnderscoreSeparated($input) 110 { 111 // Convert spaces and dashes to underscores. 112 $input = preg_replace('#[ \-_]+#', '_', $input); 113 114 return $input; 115 } 116 117 /** 118 * Method to convert a string into variable form. 119 * 120 * @param string $input The string input (ASCII only). 121 * 122 * @return string The variable string. 123 * 124 * @since 1.0 125 */ 126 public static function toVariable($input) 127 { 128 // Convert to camel case. 129 $input = self::toCamelCase($input); 130 131 // Remove leading digits. 132 $input = preg_replace('#^[0-9]+#', '', $input); 133 134 // Lowercase the first character. 135 $input = lcfirst($input); 136 137 return $input; 138 } 139 140 /** 141 * Method to convert a string into key form. 142 * 143 * @param string $input The string input (ASCII only). 144 * 145 * @return string The key string. 146 * 147 * @since 1.0 148 */ 149 public static function toKey($input) 150 { 151 // Remove spaces and dashes, then convert to lower case. 152 $input = self::toUnderscoreSeparated($input); 153 $input = strtolower($input); 154 155 return $input; 156 } 157} 158