/** * Checks validity of a string based on regex * and responds if invalid chars are found * * @param string $string The value bein checked * @param string $Thing Human-readable name for $string * @param string $pattern An inverse pattern that matches INVALID characters * @param bool $returnError If true retursn the error message instead of responding * * @return null|string */ static function checkStringValidity($string, $Thing, $pattern, $returnError = false) { if (preg_match_all(new RegExp($pattern, 'u'), $string, $fails)) { $invalid = array(); foreach ($fails[0] as $f) { if (!in_array($f, $invalid)) { switch ($f) { case "\n": $invalid[] = '\\n'; case "\r": $invalid[] = '\\r'; default: $invalid[] = $f; } } } $count = count($invalid); $s = $count !== 1 ? 's' : ''; $the_following = $count !== 1 ? 'the following' : 'an'; $Error = "{$Thing} (" . self::escapeHTML($string) . ") contains {$the_following} invalid character{$s}: " . CoreUtils::arrayToNaturalString($invalid); if ($returnError) { return $Error; } Response::fail($Error); } }
function testArrayToNaturalString() { $result = CoreUtils::arrayToNaturalString([1]); self::assertEquals('1', $result); $result = CoreUtils::arrayToNaturalString([1, 2]); self::assertEquals('1 and 2', $result); $result = CoreUtils::arrayToNaturalString([1, 2, 3]); self::assertEquals('1, 2 and 3', $result); $result = CoreUtils::arrayToNaturalString([1, 2, 3, 4]); self::assertEquals('1, 2, 3 and 4', $result); }