正则表达式只允许10或16位逗号分隔数字

时间:2015-12-06 09:36:46

标签: java regex

我想验证基于Java的应用程序中的文本字段,我想只允许使用逗号分隔的数字,它们应该是10或16位数。我有一个//Locating element by tagName and store its text in variable dropdown. String dropdown = driver.findElement(By.tagName("select")).getText(); 的正则表达式只允许数字,但它不适用于10或16位数。

4 个答案:

答案 0 :(得分:0)

您可以使用{n,m}指定长度。

因此将一个号码与10位或16位数匹配

^(\d{10}|\d{16})$

含义:匹配10或16位数字,之前的东西是行首和后面的东西是行尾。

现在添加分隔符:

^((\d{10}|\d{16})[,;])*(\d{10}|\d{16})$

一些10或16位数的序列,后跟或者;然后用行尾用一个10或16个序列。

你需要在java中逃避那些\。

public static void main(String[] args) {
    String regex = "^((\\d{10}|\\d{16})[,;])*(\\d{10}|\\d{16})$";
    String y = "0123456789,0123456789123456,0123456789";
    System.out.println(y.matches(regex)); //Should be true
    String n = "0123456789,01234567891234567,0123456789";
    System.out.println(n.matches(regex)); //should be false
  }

答案 1 :(得分:0)

我可能会使用这个正则表达式:

(\d{10}(?:\d{6})?,?)+

说明:

(          - Begin capture group
  \d{10}   - Matching at least 10 digits
  (?:      - Begin non capture group 
     \d{6} - Match 6 more digits
  )?       - End group, mark as optional using ?
  ,?       - optionally capture a comma
)+         - End outer capture group, require at least 1 or more to exist? (mabye change to * for 0 or more)

以下输入符合此正则表达式

1234567890123456,1234567890 
1234567890123456
1234567890

这些输入匹配

123,1234567890
12355
123456789012

答案 2 :(得分:0)

您需要同时拥有锚点和单词边界:

Foundation`__NSBLOCKOPERATION_IS_CALLING_OUT_TO_A_BLOCK__:
    0x185378364 <+0>:  stp    x29, x30, [sp, #-16]!
    0x185378368 <+4>:  mov    x29, sp
    0x18537836c <+8>:  ldr    x8, [x0, #16]
    0x185378370 <+12>: blr    x8
->  0x185378374 <+16>: ldp    x29, x30, [sp], #16
    0x185378378 <+20>: ret  

锚点是必要的,因此您不会因部分匹配而产生误报,并且必须使用单词边界,这样您就不会得到20,26,30,32位数字的误报。

答案 3 :(得分:-1)

这是我的版本

(?:\d+,){9}\d+|(?:\d+,){15}\d+

让我们回顾一下。首先,有一个问题要说:10或16.所以,我必须在它们之间创建两个|的表达式。

第二,表达本身。您的版本只是说您允许使用数字和逗号。但是,这不是您真正想要的,因为例如,,,之类的字符串将匹配您的正则表达式。

因此,正则表达式应该类似于(?:\d+,){n}\d+,这意味着:以逗号结束的几个数字的序列,然后是几个数字的序列,例如: 123,45,678(123,45匹配第一部分,678匹配第二部分)

最后我们得到了我在答案开头写的正则表达式:

(?:\d+,){9}\d+|(?:\d+,){15}\d+

不要忘记,当你在java代码中编写正则表达式时,你必须复制反斜杠,如下所示:

Pattern.compile("\\d+,{9}\\d+|\\d+,{15}\\d+")

编辑:我刚刚添加了非捕获组(?: ...... )