for testing and deploying your application
for finding and fixing issues
for empowering human code reviews
<?php
declare(strict_types=1);
namespace Doctrine\Inflector\Rules;
use function array_map;
use function implode;
use function preg_match;
class Uninflected
{
/** @var Word[] */
private $words;
/** @var string|null */
private $regex;
public function __construct(Word ...$words)
$this->words = $words;
}
/**
* @return Word[]
*/
public static function getDefaultWords() : array
return [
new Word('.*?media'),
new Word('Amoyese'),
new Word('audio'),
new Word('bison'),
new Word('Borghese'),
new Word('bream'),
new Word('breeches'),
new Word('britches'),
new Word('buffalo'),
new Word('cantus'),
new Word('carp'),
new Word('chassis'),
new Word('clippers'),
new Word('cod'),
new Word('coitus'),
new Word('compensation'),
new Word('Congoese'),
new Word('contretemps'),
new Word('coreopsis'),
new Word('corps'),
new Word('data'),
new Word('debris'),
new Word('deer'),
new Word('diabetes'),
new Word('djinn'),
new Word('education'),
new Word('eland'),
new Word('elk'),
new Word('emoji'),
new Word('equipment'),
new Word('evidence'),
new Word('Faroese'),
new Word('feedback'),
new Word('fish'),
new Word('flounder'),
new Word('Foochowese'),
new Word('Furniture'),
new Word('furniture'),
new Word('gallows'),
new Word('Genevese'),
new Word('Genoese'),
new Word('Gilbertese'),
new Word('gold'),
new Word('headquarters'),
new Word('herpes'),
new Word('hijinks'),
new Word('Hottentotese'),
new Word('information'),
new Word('innings'),
new Word('jackanapes'),
new Word('jedi'),
new Word('Kiplingese'),
new Word('knowledge'),
new Word('Kongoese'),
new Word('love'),
new Word('Lucchese'),
new Word('Luggage'),
new Word('mackerel'),
new Word('Maltese'),
new Word('metadata'),
new Word('mews'),
new Word('moose'),
new Word('mumps'),
new Word('Nankingese'),
new Word('news'),
new Word('nexus'),
new Word('Niasese'),
new Word('nutrition'),
new Word('offspring'),
new Word('Pekingese'),
new Word('Piedmontese'),
new Word('pincers'),
new Word('Pistoiese'),
new Word('plankton'),
new Word('pliers'),
new Word('pokemon'),
new Word('police'),
new Word('Portuguese'),
new Word('proceedings'),
new Word('rabies'),
new Word('rain'),
new Word('rhinoceros'),
new Word('rice'),
new Word('salmon'),
new Word('Sarawakese'),
new Word('scissors'),
new Word('sea[- ]bass'),
new Word('series'),
new Word('Shavese'),
new Word('shears'),
new Word('sheep'),
new Word('siemens'),
new Word('species'),
new Word('staff'),
new Word('swine'),
new Word('traffic'),
new Word('trousers'),
new Word('trout'),
new Word('tuna'),
new Word('us'),
new Word('Vermontese'),
new Word('Wenchowese'),
new Word('wheat'),
new Word('whiting'),
new Word('wildebeest'),
new Word('Yengeese'),
];
public function getWords() : array
return $this->words;
public function isUninflected(string $word) : bool
return preg_match('/^(' . $this->getRegex() . ')$/i', $word, $regs) === 1;
private function getRegex() : string
if ($this->regex === null) {
$words = array_map(function (Word $word) {
return $word->getWord();
}, $this->words);
$this->regex = '(?:' . implode('|', $words) . ')';
return $this->regex;