【发布时间】:2011-09-16 02:22:14
【问题描述】:
我想要一个 java 中的正则表达式,它必须在任何位置至少包含一个字母和一个数字。它用于包含数字和数字的密码。
这应该适用于:
“1a1b23nh”已接受
“bc112w”已接受
“abc”不接受
“123”不接受
不允许使用特殊字符。
【问题讨论】:
我想要一个 java 中的正则表达式,它必须在任何位置至少包含一个字母和一个数字。它用于包含数字和数字的密码。
这应该适用于:
“1a1b23nh”已接受
“bc112w”已接受
“abc”不接受
“123”不接受
不允许使用特殊字符。
【问题讨论】:
([0-9]+[a-zA-Z][0-9a-zA-Z]*)|([a-zA-Z]+[0-9][0-9a-zA-Z]*)
【讨论】:
(([a-z]+[0-9]+)+|(([0-9]+[a-z]+)+))[0-9a-z]*
简单的内容检查怎么样?检查是否有数字和字符
String input = "b45z4d";
boolean alpha = false;
boolean numeric = false;
boolean accepted = true;
for (int i = 0; i < input.length(); ++i)
{
char c = input.charAt(i);
if (Character.isDigit(c))
{
numeric = true;
} else if (Character.isLetter(c))
{
alpha = true;
} else
{
accepted = false;
break;
}
}
if (accepted && alpha && numeric)
{
// Then it is correct
}
【讨论】:
我知道这个问题已经被回答并接受了,但我会这样做:
Pattern pattern = Pattern.compile("(?i)(?:((?:\\d+[a-z]+)|(?:[a-z]+\\d+))\\w*)");
Object[][] tests = new Object[][] {
{ "1a1b23nh", Boolean.valueOf(true) },
{ "bc112w", Boolean.valueOf(true) },
{ "abc", Boolean.valueOf(false) },
{ "123", Boolean.valueOf(false) }
};
for (Object[] test : tests) {
boolean result = pattern.matcher((String)test[0]).matches();
boolean expected = ((Boolean)test[1]).booleanValue();
System.out.print(test[0] + (result ? "\t " : "\t not ") + "accepted");
System.out.println(result != expected ? "\t test failed" : "");
}
System.out.println("\nAll checks have been executed");
(?i) 使正则表达式不区分大小写。
【讨论】:
这是 Python,同样的模式应该在 Java 中工作:
>>> import re
>>> re.compile('[0-9a-z]*[0-9][0-9a-z]*[a-z][0-9a-z]*|[0-9a-z]*[a-z][0-9a-z]*[0-9][0-9a-z]*', re.I)
<_sre.SRE_Pattern object at 0x830fbd0>
>>> p=_
>>> for s in '1a1b23nh', 'bc112w', 'abc', '123':
... print s, p.match(s)
...
1a1b23nh <_sre.SRE_Match object at 0xb73a3d78>
bc112w <_sre.SRE_Match object at 0xb73a3d78>
abc None
123 None
第二个想法,最好在末尾加上'$',否则它会匹配'ab12/'
【讨论】:
抱歉,javascript 示例 我会分解它以避免难以阅读的正则表达式。
function valid(s) {
return /^[a-z0-9]+$/i.test(s) &&
/[a-z]+/i.test(s) &&
/[0-9]+/.test(s)
}
valid('123a87') ; //# => true
valid('A982') ; //# => true
valid('$54 ') ; //# => false
valid('123') ; //# => false
valid('abd') ; //# => false
【讨论】: