我试图构建一个正则表达式,它基本上只允许数字,长度为8个字符且不能为空,即""或有8个空格
我已经能够获得两个独立的正则表达式,几乎可以完成我之后所做的事情: ^(?!\ s * $)。+ ,不允许空字符串,但允许空格。另外: ^ [0-9] + $ ,这样我只能搜索数字。
我想结合这些正则表达式,并在子句中组合以匹配8个字符长的字符串。
关于如何将迄今为止的内容结合起来的任何建议?
答案 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+)*");