Javascript 用 Yup 验证电话号码?

声明:本页面是StackOverFlow热门问题的中英对照翻译,遵循CC BY-SA 4.0协议,如果您需要使用它,必须同样遵循CC BY-SA许可,注明原文地址和作者信息,同时你必须将它归于原作者(不是我):StackOverFlow 原文地址: http://stackoverflow.com/questions/52483260/
Warning: these are provided under cc-by-sa 4.0 license. You are free to use/share it, But you must attribute it to the original authors (not me): StackOverFlow

提示:将鼠标放在中文语句上可以显示对应的英文。显示中英文
时间:2020-08-23 04:59:42  来源:igfitidea点击:

Validate phone number with Yup?

javascriptyup

提问by Evanss

I'm trying to validate a phone number with 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)validates that the number is 8 or more. So simply entering 8will pass. How can I make 8 characters required so 1000 0000would pass?

.min(8)验证数字是 8 或更多。所以只要进入8就会通过。我怎样才能要求 8 个字符才能1000 0000通过?

回答by filippofilip

Hi right now I'am solving same problem as you and I found possible solution.

嗨,现在我正在解决和你一样的问题,我找到了可能的解决方案。

Validate phone number with string that matches Regex

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

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')

You can search for different Regex Expressions and validate it. I've used Regex from this article https://www.sitepoint.com/community/t/phone-number-regular-expression-validation/2204

您可以搜索不同的 Regex 表达式并对其进行验证。我在这篇文章中使用了正则表达式https://www.sitepoint.com/community/t/phone-number-regular-expression-validation/2204

回答by abhisekp

From Simple React Validator,

简单的反应验证器

The regex for phone number validation is

电话号码验证的正则表达式是

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


Example

例子

// 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)
  );
});


>. Update .<

>. 更新.<

I've created a yup-phonemodule that uses google-libphonenumberwhich gives accurate validation checks and can be installed directly from github

我创建了一个yup-phone模块,用于google-libphonenumber提供准确的验证检查,并且可以直接从 github 安装

npm install --save abhisekp/yup-phone.

npm install --save abhisekp/yup-phone.

Check Usage

检查使用情况

const Yup = require('yup');
require('yup-phone');

// validate any phone number (defaults to India for country)
const phoneSchema = Yup.string().phone().required();
phoneSchema.isValid('9876543210'); // → true

回答by Sirisha

Try this, it might be helpful for you.

试试这个,它可能对你有帮助。

mobile: Yup.string().matches(/^[6-9]\d{9}$/, {message: "Please enter valid number.", excludeEmptyString: false})

mobile: Yup.string().matches(/^[6-9]\d{9}$/, {message: "请输入有效号码。", excludeEmptyString: false})

回答by A.Veryga

Yup.string().matches(/^\d{8}$/, 'is not valid')

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

回答by adrxlm

Just a little collaboration. On my case I don't want to validate if the input is empty (when is not required). Thank you all for your examples!

只是一点点合作。在我的情况下,我不想验证输入是否为空(不需要时)。谢谢大家的例子!

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
    })
})

回答by calvin

I have a similar use case, and here's my solution:

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

// 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")
});