Регулярное выражение для проверки телефонных номеров США с помощью Formik и Yup

Я пытаюсь проверить номера телефонов внутри моей формы formik с помощью yep. Я нашел некоторую информацию о regex здесь на stackoverflow, но, похоже, она не работает. В основном мне нужно иметь возможность разрешить скобки, тире и пробелы, а также код страны. Бэкэнд преобразует все в нечто подобное: (123) 123-1234

Вот что я пробовал:

                    validationSchema={Yup.object({
                        AdministratorCell: Yup.string()
                            .matches(/([0-9]{3})[0-9]{3}-[0-9]{4}/, {
                                message: "Invalid phone number",
                                excludeEmptyString: false,
                            })
                    })}

Я использую https://github.com/google/libphonenumber в бэкенде для валидации этих телефонных номеров, поэтому мне нужна валидация на фронтенде для правильной работы, иначе форма не будет отправлена в некоторых случаях, когда пользователи забывают номер или форматируют его определенным образом. Моя проблема заключается в том, что я могу добавить номер телефона только с определенным форматированием, иначе он не будет отправлен в бэкенд.

Однако я вижу, что код города обязателен. Иногда люди не указывают его, если в каком-то случае предполагается, что он местный. Вам понадобится символ ? после ), чтобы сделать его необязательным.

Родительские скобки используются для группировки в регулярных выражениях, поэтому не стоит использовать их в качестве литералов. Их нужно убрать, если вы не хотите, чтобы они использовались для группировки кода города.

Между кодом города и остальной частью номера нет разделителя.

Возможно, вы захотите заменить разделитель - на [- .]+ или аналогичный, в случае если пользователь использует другой разделитель, или если он делает что-то вроде 111 - 111 - 1111.

Некоторые примеры того, что не работает, могут быть полезны.

Попробуйте этот regex, он может удовлетворить ваши требования

 /^((\(\d{3}\) ?)|(\d{3}-))?\d{3}-\d{4}$/

Это будет выглядеть примерно так:

validationSchema={Yup.object({
     AdministratorCell: Yup.string()
        .matches(/^((\(\d{3}\) ?)|(\d{3}-))?\d{3}-\d{4}$/, {
           message: "Invalid phone number",
           excludeEmptyString: false,
     })
})}
Вернуться на верх