我想验证基于Java的应用程序中的文本字段,我想只允许使用逗号分隔的数字,它们应该是10或16位数。我有一个//Locating element by tagName and store its text in variable dropdown.
String dropdown = driver.findElement(By.tagName("select")).getText();
的正则表达式只允许数字,但它不适用于10或16位数。
答案 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+")
编辑:我刚刚添加了非捕获组(?: ...... )