【问题标题】:Material-UI: Restrict specific special characters in TextFieldMaterial-UI:限制 TextField 中的特定特殊字符
【发布时间】:2021-03-29 02:41:53
【问题描述】:

如何验证或不允许在 Material-UI TextField 上输入以下特殊字符 [^%<>\\$'"]

以下是我现有的代码。

const useStyles = makeStyles((theme) => ({
textField: {
    marginRight: theme.spacing(1),
    width: 500,
},
FormLabelHeader:{
    fontSize: '20px',
    width: 500,
},
})
enter code here
const txtNameChange = (e) =>
{
    setpersonDetails(prevState =>({
        ...prevState,
        'NAME' : e.target.value
    }))
}

.....
<FormControl>
   <FormLabel className = {style.FormLabelHeader}>Add</FormLabel><br/>
   <TextField className = {style.textField} label='NAME' name = 'NAME' variant='outlined' autoComplete='off' onChange={txtNameChange}/><br />
</FormControl>

【问题讨论】:

    标签: reactjs material-ui


    【解决方案1】:

    如何进行验证

    您可以通过设置TextFieldhelperTexterror 属性在验证值后提供错误消息:

    const [name, setName] = useState("");
    const [error, setError] = useState("");
    const onChange = (e) => {
      const newValue = e.target.value;
    
      if (!newValue.match(/[%<>\\$'"]/)) {
        setError("");
      } else {
        setError("Unforbidden character: %<>$'\"");
      }
      setName(newValue);
    };
    
    return (
      <TextField
        value={name}
        onChange={onChange}
        helperText={error} // error message
        error={!!error} // set to true to change the border/helperText color to red
      />
    );
    

    或不允许进入

    由于您已经在代码中控制了TextField 的值,因此如果验证失败,请不要更新状态:

    const onChange = (e) => {
      const newValue = e.target.value;
    
      if (!newValue.match(/[%<>\\$'"]/)) {
        setError("");
        setName(newValue); // only set when successful
      } else {
        setError("Unforbidden character: %<>$'\"");
      }
    };
    

    【讨论】:

    • 嗨@NearHuscarl,我尝试并按照您所说的进行操作,但即使我输入了无效字符,它也总是转到if,而不是重定向到else。保存到setName 的特殊字符无效。希望你能帮我解决这个问题。谢谢
    • @Rymrk 对不起,我的错。已在更新的答案中修复。
    • 嗨@NearHuscarl,谢谢,它现在正在工作。如果我想添加其他特殊字符,我应该放在哪里?例如[ ]。我试着把它说出来,但只有[ 正在被验证。谢谢
    • [] 是正则表达式中的特殊字符。尝试转义:\[\] @Rymrk
    • 可以检查字符串值的长度,看看是否满足约束:if (newValue.length &gt; 0 || newValue.length &lt; n) 例如@Rymrk
    猜你喜欢
    • 1970-01-01
    • 2018-10-25
    • 1970-01-01
    • 2014-11-03
    • 2017-02-21
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2018-10-30
    相关资源
    最近更新 更多