最近朋友有个用户名验证,要求字母、数字、字符任意两种组合即可,让我帮写个正则验证,现在正则验证如下:
/**
* 判断是否匹配正则
*
* @param regex 正则表达式
* @param input 要匹配的字符串
* @return {@code true}: 匹配<br>{@code false}: 不匹配
*/
public static boolean isMatch(final String regex, final CharSequence input) {
return input != null && input.length() > 0 && Pattern.matches(regex, input);
}
public static boolean isTest(CharSequence input) {
String regex = "^(?![0-9]+$)(?![a-zA-Z]+$)[A-Za-z0-9\\W]{1,}$";
// Pattern compile = Pattern.compile(regex);
// Matcher matcher = compile.matcher(input.toString());
// return matcher.find();
return isMatch(regex, input);
}
- 测试
Log.i("@@@", "abc12/.,===" + RegexUtils.isTest("abc12/.,"));
Log.i("@@@", "abc12===" + RegexUtils.isTest("abc12"));
Log.i("@@@", "abc.,/===" + RegexUtils.isTest("abc.,/"));
Log.i("@@@", "123.,/===" + RegexUtils.isTest("123.,/"));
Log.i("@@@", "123.,asdasd/===" + RegexUtils.isTest("123.,asdasd/"));
Log.i("@@@", ",./123.,asdasd/===" + RegexUtils.isTest("123.,asdasd/"));
Log.i("@@@", "asdas,./123===" + RegexUtils.isTest("sdas,./123"));
Log.i("@@@", "1234adsfa===" + RegexUtils.isTest("1234adsfa"));
Log.i("@@@", "。,123,,sfdwe][0989//.';';[===" + RegexUtils.isTest("。,123,,sfdwe][0989//.';';["));
Log.i("@@@", "abc===" + RegexUtils.isTest("abc"));
- 输出结果如下:
@@@: abc12/.,===true
@@@: abc12===true
@@@: abc.,/===true
@@@: 123.,/===true
@@@: 123.,asdasd/===true
@@@: ,./123.,asdasd/===true
@@@: asdas,./123===true
@@@: 1234adsfa===true
@@@: 。,123,,sfdwe][0989//.';';[===true
@@@: abc===false
- 正则说明
String regex = "^(?![0-9]+$)(?![a-zA-Z]+$)[A-Za-z0-9\\W]{1,}$";
^ 匹配一行的开头位置
(?![0-9]+$) 预测该位置后面不全是数字
(?![a-zA-Z]+$) 预测该位置后面不全是字母
[A-Za-z0-9\\W]{1,} 由1位数字、字母、符号中任意两种组成
$ 匹配行结尾位置