MUI 输入字段只接受字母、数字和破折号?

ano*_*ser 2 forms input typescript reactjs material-ui

如何限制 MUI 输入字段仅接受字母、数字和破折号?因此空格和符号 (*&^%$#@!,.<>{}[]) 将被排除。

更具体地说,我想允许任何不会导致 URL 崩溃的内容,即https://mywebsite.com/user- generated-string-here123 。

谢谢!

Bha*_*n V 5

您可以传递一个处理程序onKeyDown并检查按下的键。如果按下的键不是字母、数字或破折号,则排除。

const ALPHA_NUMERIC_DASH_REGEX = /^[a-zA-Z0-9-]+$/;
Run Code Online (Sandbox Code Playgroud)
<TextField
  onKeyDown={(event) => {
    if (!ALPHA_NUMERIC_DASH_REGEX.test(event.key)) {
      event.preventDefault();
    }
  }}
/>
Run Code Online (Sandbox Code Playgroud)

或者,对于受控组件,您可以在onChange处理程序中进行验证并根据值更新状态。这还将验证粘贴到文本字段中的值,并在条件不满足时忽略。

const [value, setValue] = useState('');
Run Code Online (Sandbox Code Playgroud)
<TextField
  value={value}
  onChange={(event) => {
    const value = event.target.value;
    if (value !== "" && !ALPHA_NUMERIC_DASH_REGEX.test(value)) {
      return;
    }
    setValue(value);
  }}
/>
Run Code Online (Sandbox Code Playgroud)

这是codesandbox 中工作演示的链接。