'-')) { // replace whitespaces $identifier = strtr($identifier, $filter); // CSS class identifiers must not start with // - a digit // - two hyphens // - hyphen followed by a digit $prev = ''; while ($prev != $identifier) { $prev = $identifier; $identifier = preg_replace(array('/^\d*/u', '/^\x{002D}*(?=\x{002D})/u', '/^\x{002D}\d/u'),'', $identifier); } // Valid characters in a CSS identifier are: // - the hyphen (U+002D) // - a-z (U+0030 - U+0039) // - A-Z (U+0041 - U+005A) // - the underscore (U+005F) // - 0-9 (U+0061 - U+007A) // - ISO 10646 characters U+00A1 and higher, // We strip out any character not in the above list. // as opposed to the spec we do not allow U+00A0 // as opposed to the spec we only allow code points up to U+FFFF $identifier = preg_replace('/[^\x{002D}\x{0030}-\x{0039}\x{0041}-\x{005A}\x{005F}\x{0061}-\x{007A}\x{00A1}-\x{FFFF}]/u', '', $identifier); return $identifier; } $classes = array( '----foo', '-foo', 'foo', '1foo', '1111foo', '1111---foo', '-1--foo', '---11---_foo bar' ); foreach ($classes as $class) { print "$class: " . drupal_clean_css_identifier($class) . "\n"; }