字母、数字、字符任意两种组合正则验证

最近朋友有个用户名验证,要求字母、数字、字符任意两种组合即可,让我帮写个正则验证,现在正则验证如下:

    /**
     * 判断是否匹配正则
     *
     * @param regex 正则表达式
     * @param input 要匹配的字符串
     * @return {@code true}: 匹配
{@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位数字、字母、符号中任意两种组成

$ 匹配行结尾位置

你可能感兴趣的:(字母、数字、字符任意两种组合正则验证)