static function validateTagName($key) { $name = strtolower((new Input($key, function ($value, $range) { if (Input::checkStringLength($value, $range, $code)) { return $code; } if ($value[0] === '-') { return 'dash'; } $sanitized_name = preg_replace(new RegExp('[^a-z\\d]'), '', $value); if (preg_match(new RegExp('^(b+[a4]+w*d+|g+[uo0]+d+|(?:b+[ae3]+|w+[o0u]+r+)[s5]+[t7]+)(e+r+|e+s+t+)?p+[o0]+[wh]*n+[ye3]*'), $sanitized_name)) { return 'opinionbased'; } }, array(Input::IN_RANGE => [3, 30], Input::CUSTOM_ERROR_MESSAGES => array(Input::ERROR_MISSING => 'Tag name cannot be empty', Input::ERROR_RANGE => 'Tag name must be between @min and @max characters', 'dash' => 'Tag name cannot start with a dash', 'opinionbased' => 'Highly opinion-based tags are not allowed'))))->out()); CoreUtils::checkStringValidity($name, 'Tag name', INVERSE_TAG_NAME_PATTERN); return $name; }