Правильно ли составлено регулярное выражение на PHP?
Делать символьные классы из одного символа совершенно излишне. С другой стороны, тогда вам придётся экранировать специальные символы (скобки, плюс). Такая запись (с экранированием) более привычна тем, кто знаком с регулярками, но может быть сложнее для новичков. Однако, я всё же рекомендую привыкать к обратным слэшам - скоро вы перестанете их замечать.Символьный класс [0-9] можно заменить на сокращение \d. На мой взгляд, так выглядит чище.Если уж ставите ограничение на конец строки ($), то и начало (^) стоит поставить.Учитывая, что у вас в строке вообще нет букв, ни к чему добавлять модификатор i
Результат:/^\+380\(\d{2}\)\d{3}-\d{2}-\d{2}$/
https://regex101.com/r/lCsKL2/1
Основная ваша ошибка - не экранированные символы "+", "(" и ")". Ну и каждый отдельный символ брать в квадратные кавычки не обязательно. Вместо "[0-9]" можно использовать "\d"