【问题标题】:How to disable a button if the user entered input is not valid email using javascript and react?如果用户输入的输入不是使用javascript的有效电子邮件并做出反应,如何禁用按钮?
【发布时间】:2020-11-27 12:32:58
【问题描述】:

我想在输入字段中添加电子邮件验证,并在此基础上禁用添加按钮,如果用户输入的电子邮件错误。

下面你可以看到我的代码,

function Parent() {
    const [email, setEmail] = useState('');
    const onEmailChange = (event: any) => {
        setEmail(event.target.value);
    };

   const isDisabled = email.length === 0;

    return (
         <Input
             type="email"
             value={email}
             onChange={onEmailChange}
             placeholder="Insert user email"
         />
         <button disabled={isdisabled}>Add</button> //add button to be disabled when      user input email is wrong
   );

}

我想确保我对输入进行了基本的电子邮件验证,并且只能输入数字''。

有人可以帮我解决这个问题吗?提前致谢。

编辑:

错误不必要的转义字符的图像

【问题讨论】:

    标签: javascript reactjs


    【解决方案1】:

    您可以使用regex 来通过onChange() 属性检查输入值是否为电子邮件。

    import React from "react";
    
    const regex = /^(([^<>()[\].,;:\s@"]+(\.[^<>()[\].,;:\s@"]+)*)|(".+"))@(([^<>()[\].,;:\s@"]+\.)+[^<>()[\].,;:\s@"]{2,})$/i;
    
    export default function App() {
    
      const [isDisabled, setDisibility] = React.useState(true);
    
      const checkEmail = e => {
        setDisibility(!regex.test(e.target.value));
      }
    
      return (
        <div>
          <input onChange={checkEmail} placeholder="email address" />
          <button disabled={isDisabled}>add</button>
        </div>
      );
    }
    

    https://codesandbox.io/s/dry-sun-votmt?fontsize=14&hidenavigation=1&theme=dark

    【讨论】:

    • 感谢这给了我在正则表达式不必要的转义字符中的错误。并且不允许我输入输入字段。附上我的问题中的错误图片
    • @saritha 这是您可以禁用的 lint 规则 (no-useless-escape),但我还更新了代码中的正则表达式,没有转义字符,因此您现在可以尝试(也更新了 sandBox)
    【解决方案2】:

    有多种方法可以做到这一点,但我建议在初始化为 true 的状态下跟踪按钮的禁用状态。

    现在更改 useEffect 中的禁用状态,该状态在每次更改电子邮件时运行,并根据您的验证将其设置为 true 或 false。

    import React from "react";
    
    // Modify this function as per your needs
    const validateEmail = email => typeof email === "string" && email.includes("@");
    
    export default function App() {
      const [email, setEmail] = React.useState("");
      const [isDisabled, setIsDisabled] = React.useState(true);
    
      const onEmailChange = event => {
        setEmail(event.target.value);
      };
    
      React.useEffect(() => {
        setIsDisabled(!validateEmail(email));
      }, [email]);
    
      return (
        <>
          <input
            type="text"
            value={email}
            onChange={onEmailChange}
            placeholder="Insert user email"
          />
          <button disabled={isDisabled}>Add</button>
        </>
      );
    }
    
    

    这是codesandbox中的工作原型

    【讨论】:

    • 这个验证器函数(电子邮件)是做什么的?代码?
    • 如果你想检查输入格式你可以使用正则表达式,所以; useEffect(() =&gt; { const isValid = /^[a-zA-Z0-9]+@[a-zA-Z0-9]+\.[A-Za-z]+$/.test(email) setIsDisabled(validation); }, [email]); 这将检查电子邮件格式的输入,例如“abc@bla.bla”。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2020-11-20
    • 1970-01-01
    • 2020-10-06
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多