React,Formik,Yup:如何格式化电话输入

如何解决React,Formik,Yup:如何格式化电话输入

我是React的新手,我已经完成了一个多步骤表单,用于使用React引导程序,Formik进行注册以及使用Yup进行验证。我想添加一些功能,使我可以在几个字段中格式化(或屏蔽用户输入。
用户键入时,我想将电话输入格式化为以下格式:111-111-1111。要格式化的邮政编码:N0G 1A3。我该怎么做?有什么建议?我需要添加任何库吗?我该怎么办?

这是我做的代码

export const step1Scehma = Yup.object({
firstName: Yup.string()
            .required("This field is required"),lastName: Yup.string()
           .required("This field is required"),email: Yup.string()
           .email()
           .required("Email is required"),password: Yup.string()
             .required("This field is required")
             .matches(
              "^(?=.*[A-Za-z])(?=.*d)(?=.*[@$!%*#?&])[A-Za-zd@$!%*#?&]{8,}$","Must Contain at least 8 Characters: One Uppercase,One Lowercase,One Number and one 
               special case Character"
              ),phone: Yup.string()
           .required("This field is required")
});

export const Step1 = ({ formik }) => {
   const { handleChange,values,errors,touched } = formik;

return (
<React.Fragment>
  <Container>
    <Card.Title className="text-center">New User</Card.Title>
    <Card.Body>
      <Form.Group as={Col}>
        <Form.Label>First Name</Form.Label>
        <Form.Control
          type="text"
          name="firstName"
          onChange={handleChange}
          value={values.firstName}
          isValid={touched.firstName && !errors.firstName}
          isInvalid={!!errors.firstName}
          className={touched.firstName && errors.firstName ? "error" : null}
        />
        {touched.firstName && errors.firstName ? (<div className="error-message">{errors.firstName}</div>): null}
      </Form.Group>

      <Form.Group as={Col}>
        <Form.Label>Last Name</Form.Label>
        <Form.Control
          type="text"
          name="lastName"
          onChange={handleChange}
          value={values.lastName}
          isValid={touched.lastName && !errors.lastName}
          isInvalid={!!errors.lastName}
          className={touched.lastName && errors.lastName ? "error" : null}
        />
        {touched.lastName && errors.lastName ? (<div className="error-message">{errors.lastName}</div>): null}
      </Form.Group>

      <Form.Group as={Col} >
        <Form.Label>Email</Form.Label>
        <Form.Control
          type="text"
          name="email"
          onChange={handleChange}
          value={values.email}
          isValid={touched.email && !errors.email}
          isInvalid={!!errors.email}
          className={touched.email && errors.email ? "error" : null}
        />
        {touched.email && errors.email ? (<div className="error-message">{errors.email}</div>): null}
      </Form.Group>

      <Form.Group as={Col} >
        <Form.Label>Password</Form.Label>
        <Form.Control
          type="password"
          name="password"
          onChange={handleChange}
          value={values.password}
          isValid={touched.password && !errors.password}
          isInvalid={!!errors.password}
          className={touched.password && errors.password ? "error" : null}
        />
        {touched.password && errors.password ? (<div className="error-message">{errors.password}</div>): null}
      </Form.Group>
  
      <Form.Group as={Col} >
        <Form.Label>Phone Number</Form.Label>
        <Form.Control
          type="tel"
          name="phone"
          onChange={handleChange}
          value={values.phone}
          isValid={touched.phone && !errors.phone}
          isInvalid={!!errors.phone}
          className={touched.phone && errors.phone ? "error" : null}
        />
        {touched.phone && errors.phone ? (<div className="error-message">{errors.phone}</div>): null}
      </Form.Group>
    </Card.Body>
  </Container>
</React.Fragment>
);
};

解决方法

您可以使用https://github.com/sanniassin/react-input-mask

https://www.npmjs.com/package/react-input-mask

示例非常详细。我将此用于Yup和Material UI。

<InputMask mask="999-999-9999" onChange={ handleChange } onBlur={ handleBlur } value={values.billing_phone} error={errors.billing_phone && touched.billing_phone} helperText={(errors.billing_phone && touched.billing_phone) && errors.billing_phone}>
    {(inputProps) => <TextField {...inputProps} className={classes.MuiInputBase} id="billing_phone" variant="outlined"  name="billing_phone" placeholder={addressObj.phone}  />}
</InputMask>

如果您不使用普通的<input />,则必须像我一样包装元素。您可以在NPM页面上找到有关此内容的讨论。

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。

相关推荐


Selenium Web驱动程序和Java。元素在(x,y)点处不可单击。其他元素将获得点击?
Python-如何使用点“。” 访问字典成员?
Java 字符串是不可变的。到底是什么意思?
Java中的“ final”关键字如何工作?(我仍然可以修改对象。)
“loop:”在Java代码中。这是什么,为什么要编译?
java.lang.ClassNotFoundException:sun.jdbc.odbc.JdbcOdbcDriver发生异常。为什么?
这是用Java进行XML解析的最佳库。
Java的PriorityQueue的内置迭代器不会以任何特定顺序遍历数据结构。为什么?
如何在Java中聆听按键时移动图像。
Java“Program to an interface”。这是什么意思?
Java在半透明框架/面板/组件上重新绘画。
Java“ Class.forName()”和“ Class.forName()。newInstance()”之间有什么区别?
在此环境中不提供编译器。也许是在JRE而不是JDK上运行?
Java用相同的方法在一个类中实现两个接口。哪种接口方法被覆盖?
Java 什么是Runtime.getRuntime()。totalMemory()和freeMemory()?
java.library.path中的java.lang.UnsatisfiedLinkError否*****。dll
JavaFX“位置是必需的。” 即使在同一包装中
Java 导入两个具有相同名称的类。怎么处理?
Java 是否应该在HttpServletResponse.getOutputStream()/。getWriter()上调用.close()?
Java RegEx元字符(。)和普通点?