如何使用此模式:[A-Za-z0-9]{10}
还可以匹配其他文字大小,例如:12和25?
我试着让它像:
[A-Za-z0-9]{10|12|25}
([A-Za-z0-9]){10}|{12}|{25}
但它没有成功。
答案 0 :(得分:6)
如果您只需要匹配特定尺寸,则需要使用替换:
^(?:[A-Za-z0-9]{10}|[A-Za-z0-9]{12}|[A-Za-z0-9]{25})$
如果要匹配范围内的符号,例如10到25,则可以使用
^[A-Za-z0-9]{10,25}$
此外,[A-Za-z0-9]
可以替换为\p{Alnum}
(请参阅Java regex reference)。
\p{Alnum}
字母数字字符:[\p{Alpha}\p{Digit}]
带String#matches
的Java code demo(不需要锚点):
System.out.println("1234567890".matches("[A-Za-z0-9]{10}|[A-Za-z0-9]{12}|[A-Za-z0-9]{25}"));
// => true, 10 Alnum characters
System.out.println("12345678901".matches("\\p{Alnum}{10}|\\p{Alnum}{12}|\\p{Alnum}{25}"));
// => false, 11 Alnum characters
System.out.println("123456789012".matches("\\p{Alnum}{10}|\\p{Alnum}{12}|\\p{Alnum}{25}"));
// => true, 12 Alnum characters
答案 1 :(得分:2)
你可以
([A-Za-z0-9]){10}|([A-Za-z0-9]){12}|([A-Za-z0-9]){25}
请注意,使用[A-Za-z0-9]
可以更简单地表达\p{Alnum}
,从而制作正则表达式:
(\\p{Alnum}){10}|(\\p{Alnum}){12}|(\\p{Alnum}){25}
答案 2 :(得分:1)
为了避免正则表达式引擎无用的工作,你可以写:
[A-Za-z0-9]{10}(?:[A-Za-z0-9]{2}(?:[A-Za-z0-9]{13})?)?
这样,第一个字符只被解析一次。