Регулярное выражение для проверки телефонных номеров США с помощью 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,
})
})}