是的 phone 号码验证不起作用

Yup phone number validation doesn't works

我有下一个表格和表格:

const formik = useFormik( {
    initialValues: {
      number: '',
    },
    onSubmit: values => {
      action( values.number );
    },
    validationSchema: numberSchema,
  } );

  return (
    <form onSubmit={formik.handleSubmit}>
      <SomeForm>
        <InputLabel htmlFor="some-number">
          <FormattedMessage {...messages.number} />
        </InputLabel>
        <Input
          value={formik.values.number}
          onChange={formik.handleChange}
          id="number"
          type="tel"
          placeholder="+1 (000) 000 0000"
        />
.
.
.

架构如下:

const numberSchema = Yup.object( {
    number:
        Yup.number().typeError( "That doesn't look like a phone number" )
            .required( 'Phone number is required!' )
            .positive()
            .min( 7 )
} );

问题出在验证输入数字的计数上,当我只输入一个数字时出现错误,数字应大于或等于 7,但在第二次输入后,此错误消息消失。为什么输入超过 1 位数字后就停止验证?

您将其验证为数字而不是字符串,因此 .min 在这种情况下意味着数字值必须至少为 7。它不是长度。您必须将其验证为字符串并使用正则表达式模式。示例:

phoneSchema = Yup.string().matches(new RegExp('[0-9]{7}'))

然后还可以做的更高级