4

我正在尝试构建一个基本上只允许数字、8 个字符长且不能为空的正则表达式,即“”或有 8 个空格

我已经能够获得两个独立的正则表达式,它们几乎可以满足我的要求: ^(?!\s*$).+不允许空字符串,但允许空格。另外:^[0-9]+$这让我只搜索数字。

我想结合这些正则表达式和一个子句来匹配 8 个字符长的字符串。

关于如何结合我目前所拥有的任何建议?

4

5 回答 5

6

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

  • ^(?!\s*$)如您所知,将检查整个字符串是否不仅是空格
  • [0-9\s]将匹配任何数字和空格
  • {8}表示它之前恰好出现 8 次元素(在我们的例子中是数字或空格)
于 2013-06-13T14:44:11.370 回答
2

无法真正了解字符串如何为 8 个字符长且仅包含数字和空格,但要匹配仅 8 个数字,请尝试以下操作:

^\d{8}$
于 2013-06-13T14:43:00.950 回答
2

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

编辑:嗯,我之前误读了关于空白的部分。在要匹配的字符串中是否可以有空格,或者就在它周围?如果是前者,我将不得不重新回答我的答案。如果是后者,请删除^and $

编辑 v2: Pshemo 有这一天。

于 2013-06-13T14:43:53.517 回答
0

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

或者在java中...

String re = "^[\\d|\\s]{8}$";
于 2013-06-13T14:47:00.907 回答
0

首先对字符串进行长度检查,看看它是否有八个字符长;)

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

// No need to anchor the regex since we use .matches()
return input.length() == 8 && input.trim().matches("\\d+(\\s+\\d+)*");
于 2013-06-13T14:51:06.853 回答