FanatPHP, выражение не я писал, так что вопрос не ко мне. Я просто написал аналог для php.
То, что у автора вопроса текстовое описание не совпадает с тем, как работает его код, это тоже не ко мне.
В вопросе конкретно непонятно то, что его заголовок "Как правильно написать регулярку?" прямо противоречит телу "Как правильно проверять строку по этой регулярке?". И то, что ответ на второй вопрос находится по первой ссылке в поисковике.
А в остальном всё предельно понятно, разумеется.