我希望有正则表达式来检查输入字符a-z
和0-9
但我不想允许输入只是数字值(必须至少有一个字母字符)< / p>
例如:
413123123123131
不允许但如果在短语的任何地方只有一个字母字符就可以了
我试图为此定义正确的正则表达式,并在最后我提出
[0-9]*[a-z].*
但是现在我很困惑如何定义{x,y}
短语的长度我想要{9,31}
但是在最后*
之后我也不能有长度块我试图定义组但不幸而不是工作
如何添加???
答案 0 :(得分:4)
您寻求的是
String regex = "(?=.{9,31}$)\\p{Alnum}*\\p{Alpha}\\p{Alnum}*";
将其与String#matches()
/ Pattern#matches()
方法一起使用,以要求完整字符串匹配:
if (s.matches(regex)) {
return true;
}
<强>详情
^
- 隐含在matches()
中 - 匹配字符串的开头(?=.{9,31}$)
- 一个积极的预测,除了从字符串的开头到结尾的换行符之外,需要9到31个字符\\p{Alnum}*
- 0个或更多字母数字字符\\p{Alpha}
- ASCII字母\\p{Alnum}*
- 0个或更多字母数字字符String lines[] = {"413123123123131", "4131231231231a"};
Pattern p = Pattern.compile("(?=.{9,31}$)\\p{Alnum}*\\p{Alpha}\\p{Alnum}*");
for(String line : lines)
{
Matcher m = p.matcher(line);
if(m.matches()) {
System.out.println(line + ": MATCH");
} else {
System.out.println(line + ": NO MATCH");
}
}
输出:
413123123123131: NO MATCH
4131231231231a: MATCH
答案 1 :(得分:2)
这可能就是你要找的东西。
[0-9a-zA-Z]*[a-zA-Z][0-9a-zA-Z]*
为了帮助解释它,可以将中间词视为一个必需字符,将外部术语视为任意数量的字母数字字符。
编辑:要限制整个字符串的长度,您可能需要在匹配后手动检查。即
if (str.length > 9 && str.length < 31)
Wiktor确实提供了一个涉及更多正则表达式的解决方案,请查看他的更好的正则表达式
答案 2 :(得分:1)
试试这个正则表达式:
^(?:(?=[a-z])[a-z0-9]{9,31}|(?=\d.*[a-z])[a-z0-9]{9,31})$
或稍微缩短形式:
^(?:(?=[a-z])|(?=\d.*[a-z]))[a-z0-9]{9,31}$
解释(对于第一个正则表达式):
^
- 字符串开头前的位置(?=[a-z])[a-z0-9]{9,31}
表示如果字符串以字母开头,则匹配字母和数字。最低9和最高31 |
- 或(?=\d.*[a-z])[a-z0-9]{9,31}
表示如果字符串以数字开头,后跟字符串中的某个字母,则匹配字母和数字。最小值9和最大值31.这也可以确保如果字符串以数字开头,如果字符串中没有任何字母,则不会有任何匹配$
- 位于字符串输出:
413123123123131 NO MATCH(no alphabets)
kjkhsjkf989089054835werewrew65 MATCH
kdfgfd4374985794379857984379857weorjijuiower NO MATCH(length more than 31)
9087erkjfg9080980984590p465467 MATCH
4131231231231a MATCH
kjdfg34 NO MATCH(Length less than 9)
答案 3 :(得分:0)
这是正则表达式:
[a-zA-Z\d]*[a-zA-Z][a-zA-Z\d]*
这里的诀窍是拥有不可选的东西。前导和尾随[a-zA-Z\d]
具有*
量词,因此它们是可选的。但是中间的[a-zA-Z]
没有可选的。该字符串必须具有与[a-zA-Z]
匹配的字符才能匹配。
但是,您需要使用length
检查字符串的长度,而不是使用正则表达式。我无法想到你如何在正则表达式中做到这一点。
实际上,我认为你可以很容易地做到这一点:
private static boolean matches(String input) {
for (int i = 0 ; i < input.length() ; i++) {
if (Character.isLetter(input.charAt(i))) {
return input.length() >= 9 && input.length() <= 31;
}
}
return false;
}