【问题标题】:Validating Telephone Number in RegEx in React在 React 中验证 RegEx 中的电话号码
【发布时间】:2020-08-13 04:08:25
【问题描述】:

我正在尝试在 React (044) 456-7890 的正则表达式中验证这种电话号码。

在此处检查代码框CLICK HERE

代码

const telRegExp = "(d{3})s*d{3}-d{4}";

let validateSchema = yup.object().shape({
  tel_no: yup.string().matches(telRegExp, "Telephone number is invalid")
});




  <InputMask
      mask="(999) 999 - 9999"
      onChange={handleChange}
      onBlur={handleBlur}
    >
     {() => (
       <TextField
         label="Telephone Number (Ex: (044) 878 - 3900)"
         name="tel_no"
         fullWidth
         variant="outlined"
         helperText={touched.tel_no ? errors.tel_no : ""}
         error={touched.tel_no && Boolean(errors.tel_no)}
       />
     )}
  </InputMask>

【问题讨论】:

  • 样本编号是否是您要为所有输入验证的确切格式?
  • @TimBiegeleisen 是的
  • 您当前的正则表达式 (d{3})s*d{3}-d{4} 是伪造的,因为您没有转义元字符。应该更正为\(\d{3}\)\s*\d{3}-\d{4}
  • @TimBiegeleisen。试过但同样的事情它仍然输出无效
  • /\(\d{3}\)\s*\d{3}-\d{4}/.test("(044) 456-7890") 正在工作。 JS 代码以及您调用正则表达式 API 的方式有问题。

标签: javascript reactjs regex formik


【解决方案1】:
^\(\d{3}\)\s\d{3}-\d{4}$

这与给定的格式完全匹配

https://regex101.com/r/HBvG3K/6

\( and \) - To escape () characters and match literally  
\s - space character. If there can be more or no spaces then add * next to \s
\d{} - decimal numbers(0-9) followed by quantifier.

let validateSchema = yup.object().shape({
  tel_no: yup
    .string()
    .matches(
      /^\(\d{3}\)\s\d{3}\s-\s\d{4}/g,
      "Telephone number is invalid"
    )
});

【讨论】:

  • 请检查我的密码箱。它仍然行不通。 codesandbox.io/s/tel-no-regex2-q4c6x?file=/src/PhoneForm.jsx
  • 谢谢。你能理解这些/^` and /g`的含义吗?。
  • / /g - 这只是为了包含正则表达式,'g' 是一个全局标识符,当您有多个要匹配的字符串时很有用。您可能不需要。 ^ 和 $ 代表字符串的开始和结束。
【解决方案2】:

要验证确切的数字格式(044) 456-7890,我建议:

\(\d{3}\)\s*\d{3}-\d{4}

Demo

【讨论】:

【解决方案3】:

我想最好使用真正的手机检查库,例如:https://github.com/catamphetamine/libphonenumber-js

【讨论】:

    猜你喜欢
    • 2011-08-07
    • 1970-01-01
    • 1970-01-01
    • 2011-03-22
    • 2018-05-24
    • 2012-06-06
    • 2019-02-12
    • 2020-02-29
    • 1970-01-01
    相关资源
    最近更新 更多