使用Yup验证电话号码?

时间:2018-09-24 16:04:19

标签: javascript yup

我正在尝试用Yup验证电话号码:

phone: Yup.number()
  .typeError("That doesn't look like a phone number")
  .positive("A phone number can't start with a minus")
  .integer("A phone number can't include a decimal point")
  .min(8)
  .required('A phone number is required'),

.min(8)验证数字是否为8或更大。因此,只需输入8即可通过。我该如何输入8个字符才能通过1000 0000

8 个答案:

答案 0 :(得分:10)

嗨,我现在正在解决与您相同的问题,并且找到了可能的解决方案。

使用与正则表达式匹配的字符串验证电话号码

const phoneRegExp = /^((\\+[1-9]{1,4}[ \\-]*)|(\\([0-9]{2,3}\\)[ \\-]*)|([0-9]{2,4})[ \\-]*)*?[0-9]{3,4}?[ \\-]*[0-9]{3,4}?$/

phoneNumber: Yup.string().matches(phoneRegExp, 'Phone number is not valid')

您可以搜索不同的Regex表达式并进行验证。 我从本文https://www.sitepoint.com/community/t/phone-number-regular-expression-validation/2204

中使用了正则表达式

答案 1 :(得分:3)

尝试一下,这可能对您有帮助。

移动电话:Yup.string()。matches(/ ^ [6-9] \ d {9} $ /,{消息:“请输入有效号码。”,excludeEmptyString:false})

答案 2 :(得分:1)

Simple React Validator

用于验证电话号码的正则表达式为

/^(\+?\d{0,4})?\s?-?\s?(\(?\d{3}\)?)\s?-?\s?(\(?\d{3}\)?)\s?-?\s?(\(?\d{4}\)?)?$/

示例

// index.js

const yup = require('yup');
const { rePhoneNumber } = require('./yup-phone')

const schema = yup.string().phone()

const phone = '+911234567890';
console.log('Is Valid? ', rePhoneNumber.test(phone)); // Is Valid? true
schema.validateSync(phone);

// yup-phone.js

const yup = require('yup');

const rePhoneNumber = /^(\+?\d{0,4})?\s?-?\s?(\(?\d{3}\)?)\s?-?\s?(\(?\d{3}\)?)\s?-?\s?(\(?\d{4}\)?)?$/;

module.exports.rePhoneNumber = rePhoneNumber

yup.addMethod(yup.string, "phone", function() {
  return this.test("phone", "Phone number is not valid", value =>
    rePhoneNumber.test(value)
  );
});

答案 3 :(得分:1)

只需一点协作即可。就我而言,我不想验证输入是否为空(不需要时)。谢谢大家的例子!

yup.addMethod(yup.string, "phone", function(messageError = 'Phone number is not valid') {
    const phoneRegExp = /^((\\+[1-9]{1,4}[ \\-]*)|(\\([0-9]{2,3}\\)[ \\-]*)|([0-9]{2,4})[ \\-]*)*?[0-9]{3,4}?[ \\-]*[0-9]{3,4}?$/
    return this.test('phone', messageError, value => {
      if (value && value.length > 0) {
        return phoneRegExp.test(value)
      }
      return true
    })
})

答案 4 :(得分:1)

我有一个类似的用例,这是我的解决方案:

// Regex source: https://www.oreilly.com/library/view/regular-expressions-cookbook/9781449327453/ch04s02.html

const phoneRegex = RegExp(
  /^\(?([0-9]{3})\)?[-. ]?([0-9]{3})[-. ]?([0-9]{4})$/
);

const schema = yup.object().shape({
  phone: yup.string().matches(phoneRegex, "Invalid phone").required("Phone is required")
});

答案 5 :(得分:0)

Yup.string()。matches(/ ^ \ d {8} $ /,“无效”)

答案 6 :(得分:0)

const phoneRegExp = /^((\\+[1-9]{1,4}[ \\-]*)|(\\([0-9]{2,3}\\)[ \\-]*)|([0-9]{2,4})[ \\-]*)*?[0-9]{3,4}?[ \\-]*[0-9]{3,4}?$/


phone_number: Yup.string()
  .required("required")
  .matches(phoneRegExp, 'Phone number is not valid')
  .min(10, "to short")
  .max(10, "to long"),

这最适合我...您可以设置自己的长度...我只希望10位数字不少于或多

答案 7 :(得分:0)

我为此制作了一个名为 yup-phone-lite 的新包。我使用了原来的 yup-phone 包,但它使用了大量的 google-libphonenumber,所以我用一个较小的叉子替换了它。