正则表达式仅阻止数字或空格,但允许数字和空格作为输入

Regex to block only numbers or only spaces, but allow numbers and spaces as input

我在 Android 应用程序中使用正则表达式来验证用户输入。
我的业务需求是不允许用户只输入空格或数字,但应该允许输入空格和数字。

  1. " " -> 不允许。
  2. “83278”-> 不允许。
  3. " 35 46" -> 允许。

目前我正在使用正则表达式

^(?![0-9 ]+$).*$ 

上面的 reqex 对于要求 #1 和 #2 工作正常,但对于要求 #3 失败,因为它不允许用户同时输入空格和数字。

有人可以帮我改进我的请求以满足我的要求吗......
提前致谢!

您可以使用

^(?!(?:[0-9]+| +)$).*$

或者,支持任何空格

^(?!(?:[0-9]+|\s+)$).*$

参见 regex demo and the regex graph:

在 Kotlin 中,使用

" 1 2".matches(Regex("""(?!(?:[0-9]+|\s+)$).*""")) // true

此外,您可以使用 ^(?:[0-9]+|\s+)$ 模式并对结果求反:

if ("    ".matches(Regex("""[0-9]+|\s+"""))) {
  println( "INVALID" )
} else {
  println( "VALID" )
}

由于 .matches() 需要完整的字符串匹配,因此在上述模式中不需要 ^(?:)$