我如何得到它,以便检查字符串中的2位或更多位数?在String s上调用匹配。
s.matches("^[a-zA-Z0-9]{8,}$");
答案 0 :(得分:8)
应该这样做......
^(?=.*[0-9].*[0-9])[a-zA-Z0-9]{8,}$
我做的唯一更改是添加此(?=.*[0-9].*[0-9])
,这是一个积极的前瞻,将尝试找到密码中的前两位数字。如果它满足,则正则表达式将照常进行。
现在,我只是想我会指出你的正则表达式将禁止特殊字符(标点符号等)。实际上,有些人喜欢在密码中输入这样的奇怪字符。
所以你可能会考虑更像这样的事情......
^(?=.*[A-Z])(?=.*[a-z])(?=.*[0-9]).{8,}$
这将允许特殊字符,同时还确保密码中至少存在一个大写字母,一个小写字母和一个数字。这只是我写了一段时间的强密码正则表达式的一个例子,如果你愿意的话,你当然可以放松一下这些限制。
答案 1 :(得分:1)
匹配两次:
s.matches("^[a-zA-Z0-9]{8,}$");
s.matches("[0-9].*[0-9]");
使用如下结果:
if ( s.matches("^[a-zA-Z0-9]{8,}$") && s.matches("[0-9].*[0-9]") ) {
# password is valid
}
答案 2 :(得分:1)
我真的没有理由用正则表达式来检查字符串的长度 - 保持简单总是一个好主意,但特别是正则表达式将一切都扔进一个完全不可读的字符串的诱惑(可能有一些奇怪的边缘箱子很诱人。
只需使用长度方法,例如“\ w *?\ d \ w *?\ d \ w *” 请注意。*是贪婪所以不要忘了?在它之后。 \ d表示java中的一个数字 - 我不认为有任何你会错过[0-9]的unicode的情况 - 但是比抱歉更安全
编辑使用\ w而不是。 (只有字符,即[a-zA-Z_0-9])
答案 3 :(得分:1)
试试这个:
(?:^|\s+)(\w{8,})(?<=(.*\d.*\d.*))(?:\s+|$)
修改为允许超过8个字符来自: http://social.msdn.microsoft.com/Forums/en/regexp/thread/8e0ced1f-8ddc-4583-89de-e29b4c4dc726
答案 4 :(得分:1)
修改强>
请勿使用match
,而是使用find
。 (阅读the documentation)
匹配方法尝试将整个输入序列与模式匹配。&gt;
这就是\d.*\d
无法与a2a2a
find方法扫描输入序列,寻找与模式匹配的下一个子序列。
这就是你需要的。
您只需要测试\d.*\d
之间是否有两个数字:
import java.util.regex.*;
class TwoDigits {
public static void main( String ... args ) {
Pattern pattern = Pattern.compile("\\d.*\\d");
Matcher matcher = pattern.matcher( args[0] );
System.out.println("Matched ( found ) ? = " + matcher.find());
}
}
但也许我在这里遗漏了一些东西,为什么不尝试它并告诉我们失败的地方。
C:\java>java TwoDigits ""
Matched ( found ) ? = false
C:\java>java TwoDigits "a"
Matched ( found ) ? = false
C:\java>java TwoDigits "1a1"
Matched ( found ) ? = true
C:\java>java TwoDigits "1a"
Matched ( found ) ? = false
C:\java>java TwoDigits "a1a"
Matched ( found ) ? = false
C:\java>java TwoDigits "a1a1"
Matched ( found ) ? = true
C:\java>java TwoDigits "2a2"
Matched ( found ) ? = true
C:\java>java TwoDigits "2aaa2"
Matched ( found ) ? = true
C:\java>java TwoDigits "2aaaaaaaaaaaaaaa2"
Matched ( found ) ? = true
C:\java>java TwoDigits "2aaaaaaaaaaaaaaa"
Matched ( found ) ? = false
C:\java>java TwoDigits "2aaaaaa2aaaaaaaaaa"
Matched ( found ) ? = true
C:\java>java TwoDigits "a3aaaaa2aaaaaaaaaa"
Matched ( found ) ? = true
答案 5 :(得分:1)
这个怎么样?
private Pattern p1 = Pattern.compile("^\\w{8,}$");
private Pattern p2 = Pattern.compile("\\d+(.*)?\\d+");
private boolean match(String s) {
return p1.matcher(s).find() && p2.matcher(s).find();
}
@Test
public void testPassword() {
assertTrue("length at least 8", match("2aaaaaa2"));
assertTrue("length at least 8", match("aaaaaaa22"));
assertTrue("length at least 8", match("22aaaaaaa"));
assertTrue("length at least 8", match("aa2aa2aaa"));
assertFalse("length less than 8", match("2aa2aaa"));
assertFalse("one digit", match("aa2aaaaa"));
assertFalse("no digits", match("aaaaaaaa"));
}