Java Regex - 不是空字符串,只有数字,8个字符长

时间:2013-06-13 14:39:35

标签: java regex

我试图构建一个正则表达式,它基本上只允许数字,长度为8个字符且不能为空,即""或有8个空格

我已经能够获得两个独立的正则表达式,几乎可以完成我之后所做的事情: ^(?!\ s * $)。+ ,不允许空字符串,但允许空格。另外: ^ [0-9] + $ ,这样我只能搜索数字。

我想结合这些正则表达式,并在子句中组合以匹配8个字符长的字符串。

关于如何将迄今为止的内容结合起来的任何建议?

5 个答案:

答案 0 :(得分:6)

只需将^(?!\s*$)放在正则表达式的开头即可。试试这种^(?!\s*$)[0-9\s]{8}$

  • ^(?!\s*$)如您所知,将检查整个字符串是否只是空格
  • [0-9\s]将匹配任何数字和空格
  • {8}表示之前恰好有8次出现的元素(在我们的例子中为数字或空格)

答案 1 :(得分:2)

无法真正了解字符串长度为8个字符并且只包含数字并且是空格,但是对于仅匹配8个数字,请尝试以下方法:

^\d{8}$

答案 2 :(得分:2)

您可以指定一个量词,以确保您的模式匹配一​​定数量的数字,如下所示:^[0-9]{8}$

编辑:嗯,之前我误读了有关空白区域的部分。是否可以匹配字符串中的空白区域,或者只是在它周围?如果是前者,我将不得不重新开始我的答案。如果是后者,请放弃^$

编辑v2: Pshemo有这一天。

答案 3 :(得分:0)

  

^ [\ d | \ s]的{8} $

或在java ...

String re = "^[\\d|\\s]{8}$";

答案 4 :(得分:0)

首先对字符串进行长度检查以确定它是否为长字符;)

然后修剪(删除开头和结尾的空格)并与\d+(\s+\d+)*匹配:

// No need to anchor the regex since we use .matches()
return input.length() == 8 && input.trim().matches("\\d+(\\s+\\d+)*");