如果字符串仅包含空格,则匹配正则表达式?

Regex expression that matches if the string contain only spaces?

我正在使用 formik with yup 来验证表单。在一个输入中,如果它仅包含空格,则它通过,这对我的用例无效。所以我通过 Google 找到某种正则表达式,所以如果字符串只有空格,它会抛出一些消息,但我没有找到任何东西。

nome: string()
      .min(3, '* Deve conter no mínimo 3 caracteres')
      .required('* Este campo é obrigatório')
      .matches(/[^\s*].*[^\s*]/g, '* This field cannot contain only blankspaces'),

问题是,当它达到 3 个字符时,即使满足要求的 yup 条件,验证也不起作用,并且与正则表达式的匹配不会阻止空格。到目前为止,我设法解决了以下问题: nome: values.nome.trim().replace(/\s+/g, ' ') 但是使用正确的正则表达式我可以实时抛出错误。

既然你想在出现任何白色 space 的情况下进行匹配,请尝试:

nome: string()
      .min(3, '* Deve conter no mínimo 3 caracteres')
      .required('* Este campo é obrigatório')
      .matches(/^(\S+$)/g, '* This field cannot contain only blankspaces'),

您可以使用

/^(?!\s+$).*/
/^(?!\s+$)/
/^\s*\S.*$/
/^\s*\S[^]*$/
/^\s*\S[\s\S]*$/

前两个正则表达式将匹配任何不等于 1 个或多个空格的字符串。

最后的第三个、第四个和第五个匹配包含至少一个非空白字符的字符串。

regex demo

详情

  • ^ - 字符串开头
  • (?!\s+$) - 如果当前位置右侧有 1 个或多个空格和字符串结尾,则匹配失败的否定前瞻
  • .* - 除换行字符外的 0 个或更多字符,尽可能多
  • \s*\S.* - 零个或多个空格,一个非空格,然后是换行符以外的任何零个或多个字符
  • \s*\S[^]* / \s*\S[\s\S]* - 与上面相同,但包括换行符在内的任何字符都可以出现在非空白字符
  • 之后
  • $ - 字符串结尾

.matches(/^(\S+$)/, '* This field cannot contain only blankspaces') 对我也有用。

标注大写S但不标注小写s