REECT JS-输入OnChange事件在键入1个额外字符之前,将电话号码设置为有效

发布于 2025-01-27 12:50:49 字数 1199 浏览 3 评论 0原文

我在React应用程序中使用验证器软件包( https://www.npmjs.coms.coms.coms.coms.coms.coms.coms.coms.coms.coms.coms.coms.coms.com/package/validator-validator )处理不同的验证示例。我正在挣扎的一个是valies.ismobilephone()。

import React, {useState} from "react";
import validator from 'validator'

export default function Login() {

let [phone, setPhone] = useState("")
let [valid, isValid] = useState("")

const setPhoneNum = (event) => {
    setPhone(event.target.value)
    isValid(validatePhoneNumber(event.target.value))
}

const validatePhoneNumber = (event) => {
    let isValidPhoneNumber = validator.isMobilePhone(phone, "en-US")
    return (isValidPhoneNumber)
}

return (
    <>
    ...
    <input
      type="tel"
      className="w-full input-primary pl-8 focus:outline-none"
      onChange={setPhoneNum}
      value={phone}
      placeholder="123 456 7890"
    />
    ...
    <>
)
}

Login.layout = Auth

在输入额外的数字之前,这与onChange事件无关,直到输入发生更改后才设置电话值。我认为我需要的是在键盘上设置电话的价值,但只是无法弄清楚

15308675309 -IsvalidphoneNumber -False

153086753091 -IsvalidphoneNumber-

I am using the validator package in a React application (https://www.npmjs.com/package/validator) to handle different validation examples. One I am struggling with is validator.isMobilePhone().

import React, {useState} from "react";
import validator from 'validator'

export default function Login() {

let [phone, setPhone] = useState("")
let [valid, isValid] = useState("")

const setPhoneNum = (event) => {
    setPhone(event.target.value)
    isValid(validatePhoneNumber(event.target.value))
}

const validatePhoneNumber = (event) => {
    let isValidPhoneNumber = validator.isMobilePhone(phone, "en-US")
    return (isValidPhoneNumber)
}

return (
    <>
    ...
    <input
      type="tel"
      className="w-full input-primary pl-8 focus:outline-none"
      onChange={setPhoneNum}
      value={phone}
      placeholder="123 456 7890"
    />
    ...
    <>
)
}

Login.layout = Auth

This does not return true until an extra number is typed which has to do with onChange event not setting the value of phone until a change in the input happens. I think what I need is to set the value of phone on keyDown but just cannot figure it out

15308675309 - isValidPhoneNumber - false

153086753091 - isValidPhoneNumber - true

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(1

无人接听 2025-02-03 12:50:49

问题在这里,您将事件作为arg,而在功能中未使用。

const validatePhoneNumber = (event) => {
    let isValidPhoneNumber = validator.isMobilePhone(phone, "en-US")
    return (isValidPhoneNumber)
}

因为,您正在通过价值

const validatePhoneNumber = (value) => {
    let isValidPhoneNumber = validator.isMobilePhone(value, "en-US")
    return (isValidPhoneNumber)
}

const Login = () => {
  let [phone, setPhone] = React.useState("");
  let [valid, isValid] = React.useState("");

  const setPhoneNum = (event) => {
    setPhone(event.target.value);
    isValid(validatePhoneNumber(event.target.value));
  };

  const validatePhoneNumber = (value) => {
    let isValidPhoneNumber = validator.isMobilePhone(value, "en-US");
    console.log(isValidPhoneNumber, value)
    return isValidPhoneNumber;
  };

  return (
    <input
      type="tel"
      className="w-full input-primary pl-8 focus:outline-none"
      onChange={setPhoneNum}
      value={phone}
      placeholder="123 456 7890"
    />
  );
};

const domContainer = document.querySelector('#app');
ReactDOM.render(<Login />, domContainer);
<script src="https://unpkg.com/validator@latest/validator.min.js"></script>

<script crossorigin src="https://unpkg.com/react@16/umd/react.production.min.js"></script>
<script crossorigin src="https://unpkg.com/react-dom@16/umd/react-dom.production.min.js"></script>

<div id="app"> </div>

Problem is here, you are passing event as arg and not used in the function.

const validatePhoneNumber = (event) => {
    let isValidPhoneNumber = validator.isMobilePhone(phone, "en-US")
    return (isValidPhoneNumber)
}

Since, you are passing the value

const validatePhoneNumber = (value) => {
    let isValidPhoneNumber = validator.isMobilePhone(value, "en-US")
    return (isValidPhoneNumber)
}

const Login = () => {
  let [phone, setPhone] = React.useState("");
  let [valid, isValid] = React.useState("");

  const setPhoneNum = (event) => {
    setPhone(event.target.value);
    isValid(validatePhoneNumber(event.target.value));
  };

  const validatePhoneNumber = (value) => {
    let isValidPhoneNumber = validator.isMobilePhone(value, "en-US");
    console.log(isValidPhoneNumber, value)
    return isValidPhoneNumber;
  };

  return (
    <input
      type="tel"
      className="w-full input-primary pl-8 focus:outline-none"
      onChange={setPhoneNum}
      value={phone}
      placeholder="123 456 7890"
    />
  );
};

const domContainer = document.querySelector('#app');
ReactDOM.render(<Login />, domContainer);
<script src="https://unpkg.com/validator@latest/validator.min.js"></script>

<script crossorigin src="https://unpkg.com/react@16/umd/react.production.min.js"></script>
<script crossorigin src="https://unpkg.com/react-dom@16/umd/react-dom.production.min.js"></script>

<div id="app"> </div>

~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文