} return true; }); Validator::addExtension('username_not_banned', function ($attribute, $value, $parameters) { $bans = FluxBB\Models\Ban::all(); foreach ($bans as $cur_ban) { // TODO: utf8_strtolower()? Or maybe strcasecmp() if that supports UTF-8? if (!empty($cur_ban->username) && strtolower($value) == strtolower($cur_ban->username)) { return false; } } return true; }); Validator::addExtension('username_not_guest', function ($attribute, $value, $parameters) { return strcasecmp($value, 'Guest') && strcasecmp($value, trans('fluxbb::common.guest')); }); Validator::addExtension('username_not_reserved', function ($attribute, $value, $parameters) { return !str_contains($value, array('[', ']', '\'', '"')); }); Validator::addExtension('no_ip', function ($attribute, $value, $parameters) { return !preg_match('%[0-9]{1,3}\\.[0-9]{1,3}\\.[0-9]{1,3}\\.[0-9]{1,3}%', $value) && !preg_match('%((([0-9A-Fa-f]{1,4}:){7}[0-9A-Fa-f]{1,4})|(([0-9A-Fa-f]{1,4}:){6}:[0-9A-Fa-f]{1,4})|(([0-9A-Fa-f]{1,4}:){5}:([0-9A-Fa-f]{1,4}:)?[0-9A-Fa-f]{1,4})|(([0-9A-Fa-f]{1,4}:){4}:([0-9A-Fa-f]{1,4}:){0,2}[0-9A-Fa-f]{1,4})|(([0-9A-Fa-f]{1,4}:){3}:([0-9A-Fa-f]{1,4}:){0,3}[0-9A-Fa-f]{1,4})|(([0-9A-Fa-f]{1,4}:){2}:([0-9A-Fa-f]{1,4}:){0,4}[0-9A-Fa-f]{1,4})|(([0-9A-Fa-f]{1,4}:){6}((\\b((25[0-5])|(1\\d{2})|(2[0-4]\\d)|(\\d{1,2}))\\b)\\.){3}(\\b((25[0-5])|(1\\d{2})|(2[0-4]\\d)|(\\d{1,2}))\\b))|(([0-9A-Fa-f]{1,4}:){0,5}:((\\b((25[0-5])|(1\\d{2})|(2[0-4]\\d)|(\\d{1,2}))\\b)\\.){3}(\\b((25[0-5])|(1\\d{2})|(2[0-4]\\d)|(\\d{1,2}))\\b))|(::([0-9A-Fa-f]{1,4}:){0,5}((\\b((25[0-5])|(1\\d{2})|(2[0-4]\\d)|(\\d{1,2}))\\b)\\.){3}(\\b((25[0-5])|(1\\d{2})|(2[0-4]\\d)|(\\d{1,2}))\\b))|([0-9A-Fa-f]{1,4}::([0-9A-Fa-f]{1,4}:){0,5}[0-9A-Fa-f]{1,4})|(::([0-9A-Fa-f]{1,4}:){0,6}[0-9A-Fa-f]{1,4})|(([0-9A-Fa-f]{1,4}:){1,7}:))%', $value); }); Validator::addExtension('no_bbcode', function ($attribute, $value, $parameters) { return !preg_match('%(?:\\[/?(?:b|u|s|ins|del|em|i|h|colou?r|quote|code|img|url|email|list|\\*|topic|post|forum|user)\\]|\\[(?:img|url|quote|list)=)%i', $value); }); Validator::addExtension('not_censored', function ($attribute, $value, $parameters) { if (FluxBB\Models\Config::disabled('o_censoring')) { return true; } return FluxBB\Models\Censor::is_clean($username); });