Tu masz pełną funkcję:
/**
* Clean a username or display name
*
* @access protected
* @param string Name
* @param string Field (name or members_display_name)
* @return array array( 'name' => $cleaned_name, 'errors' => array() )
*/
protected function _cleanName( $name, $field='members_display_name' )
{
$original = $name;
$name = trim($name);
if( $field == 'name' )
{
// Commented out for bug report #15354
//$name = str_replace( '|', '|' , $name );
/* Remove multiple spaces */
$name = preg_replace( "/\s{2,}/", " ", $name );
}
//-----------------------------------------
// Remove line breaks
//-----------------------------------------
if( ipsRegistry::$settings['usernames_nobr'] )
{
$name = IPSText::br2nl( $name );
$name = str_replace( "\n", "", $name );
$name = str_replace( "\r", "", $name );
}
//-----------------------------------------
// Remove sneaky spaces
//-----------------------------------------
if ( ipsRegistry::$settings['strip_space_chr'] )
{
/* use hexdec to convert between '0xAD' and chr */
$name = IPSText::removeControlCharacters( $name );
}
//-----------------------------------------
// Trim after above ops
//-----------------------------------------
$name = trim( $name );
//-----------------------------------------
// Test unicode name
//-----------------------------------------
$unicode_name = $this->_getUnicodeName( $name );
//-----------------------------------------
// Do we have a name?
//-----------------------------------------
if( $field == 'name' OR ( $field == 'members_display_name' AND ipsRegistry::$settings['auth_allow_dnames'] ) )
{
if( ! $name OR IPSText::mbstrlen( $name ) < 3 OR IPSText::mbstrlen( $name ) > ipsRegistry::$settings['max_user_name_length'] )
{
ipsRegistry::getClass( 'class_localization' )->loadLanguageFile( array( 'public_register' ), 'core' );
$key = $field == 'members_display_name' ? 'reg_error_no_name' : 'reg_error_username_none';
$text = sprintf( ipsRegistry::getClass( 'class_localization' )->words[ $key ], ipsRegistry::$settings['max_user_name_length'] );
//-----------------------------------------
// Only show note about special chars when relevant
//-----------------------------------------
if( strpos( $name, '&' ) !== false )
{
$text .= ipsRegistry::getClass( 'class_localization' )->words['reg_error_no_name_spec'];
}
return array( 'name' => $original, 'errors' => array( $text ) );
}
}
//-----------------------------------------
// Blocking certain chars in username?
//-----------------------------------------
if( ipsRegistry::$settings['username_characters'] )
{
$check_against = preg_quote( ipsRegistry::$settings['username_characters'], "/" );
if( !preg_match( "/^[" . $check_against . "]+$/i", $name ) )
{
return array( 'name' => $original, 'errors' => array( str_replace( '{chars}', ipsRegistry::$settings['username_characters'], ipsRegistry::$settings['username_errormsg'] ) ) );
}
}
//-----------------------------------------
// Manually check against bad chars
//-----------------------------------------
if( strpos( $unicode_name, '\' ) !== false OR
strpos( $unicode_name, 'quot;' ) !== false OR
strpos( $unicode_name, '$' ) !== false OR
strpos( $unicode_name, 'lt;' ) !== false OR
strpos( $unicode_name, '$' ) !== false OR
strpos( $unicode_name, ']' ) !== false OR
strpos( $unicode_name, '[' ) !== false OR
strpos( $unicode_name, ',' ) !== false OR
strpos( $unicode_name, '|' ) !== false OR
strpos( $unicode_name, 'gt;' ) !== false )
{
ipsRegistry::getClass( 'class_localization' )->loadLanguageFile( array( 'public_register' ), 'core' );
return array( 'name' => $original, 'errors' => array( ipsRegistry::getClass( 'class_localization' )->words['reg_error_chars'] ) );
}
return array( 'name' => $name, 'errors' => array() );
}
Jak widać są dość duże obostrzenia (i bardzo dobrze).