protected function _underscore()
    {
        return new self(
            trim(
                preg_replace(
                    '/_+/',
                    '_',
                    preg_replace(
                        '/[^\p{Ll}\p{Lu}0-9_]/u',
                        '_',
                        preg_replace(
                            '/[\s]+/u',
                            '_',
                            mb_strtolower(trim($this->value), C::ENCODING)
                        )
                    )
                ),
                '_'
            )
        );
    }