我正在尝试构建一个基本上只允许数字、8 个字符长且不能为空的正则表达式,即“”或有 8 个空格
我已经能够获得两个独立的正则表达式,它们几乎可以满足我的要求: ^(?!\s*$).+不允许空字符串,但允许空格。另外:^[0-9]+$这让我只搜索数字。
我想结合这些正则表达式和一个子句来匹配 8 个字符长的字符串。
关于如何结合我目前所拥有的任何建议?
只需放在^(?!\s*$)
正则表达式的开头即可。试试这个方法^(?!\s*$)[0-9\s]{8}$
?
^(?!\s*$)
如您所知,将检查整个字符串是否不仅是空格[0-9\s]
将匹配任何数字和空格{8}
表示它之前恰好出现 8 次元素(在我们的例子中是数字或空格)无法真正了解字符串如何为 8 个字符长且仅包含数字和空格,但要匹配仅 8 个数字,请尝试以下操作:
^\d{8}$
您可以指定一个量词,以确保您的模式将匹配一定数量的数字,如下所示^[0-9]{8}$
:
编辑:嗯,我之前误读了关于空白的部分。在要匹配的字符串中是否可以有空格,或者就在它周围?如果是前者,我将不得不重新回答我的答案。如果是后者,请删除^
and $
。
编辑 v2: Pshemo 有这一天。
^[\d|\s]{8}$
或者在java中...
String re = "^[\\d|\\s]{8}$";
首先对字符串进行长度检查,看看它是否有八个字符长;)
然后修剪(删除开头和结尾的空格)并匹配\d+(\s+\d+)*
:
// No need to anchor the regex since we use .matches()
return input.length() == 8 && input.trim().matches("\\d+(\\s+\\d+)*");