Java正则表达式之账号检验与判断基础

考虑到此时读者不知道何为正则表达式:

我需要验证一个字符串是否符合qq号码的规则,我们采取已有知识进行验证

java 复制代码
import java.util.Scanner;

public class Main{
    public static void main(String[] args){
        //正则表达式理解为一种规则
        //这种规则就是用来校验字符串的,校验数据格式的合法性
        //核心思想:先把异常数据进行过滤,然后再考虑正常数据
         Scanner sc = new Scanner(System.in);
         System.out.println("请输入一个qq号码");
         String number = sc.next();
         Boolean flag = checkQQ(number);
         System.out.println("qq号码"+flag);
    }
    public static boolean checkQQ(String qq) {
        //6-20位,0不能在开头,必须全部是数字
        int len = qq.length();
        if (len < 6 || len > 20) {
            return false;
        }
        char c = qq.charAt(0);
        if (c == 0) {
            return false;
        }
        for (int i = 0; i < len; i++) {
            char d = qq.charAt(i);
            if (d < '0' || d > '9') {
                return false;
            }

        }
        return true;

    }
}

这样写的逻辑是复杂的,较为浪费时间,因此我们选择采用API正则表达式来完成工作

java 复制代码
import java.util.Scanner;

public class Main{
    public static void main(String[] args){
        //正则表达式理解为一种规则
        //这种规则就是用来校验字符串的,校验数据格式的合法性
        //核心思想:先把异常数据进行过滤,然后再考虑正常数据
         Scanner sc = new Scanner(System.in);
         System.out.println("请输入一个qq号码");
         String number = sc.next();;
         boolean match = number.matches("[1-9]\\d{5,19}");
         System.out.println("qq号码"+match);
}

接下来我们补充一些正则表达式的判断条件

java 复制代码
import java.util.Scanner;

public class Main{
    public static void main(String[] args){
        //正则表达式理解为一种规则
        //这种规则就是用来校验字符串的,校验数据格式的合法性
        //核心思想:先把异常数据进行过滤,然后再考虑正常数据

        //我们可以粗略的将正则表达式的作用分成两个方向:
        //a:校验字符串是否满足规则
        //b:在一段文本中查找满足要求的内容
        //正则表达式规则:
        //在正则表达式中[]代表一种范围
        // [abc] 意味着字符串只能出现abc
        // [^abc] 意味着除了abc以外的所有字符
        // [a-zA-Z]a到z A到Z包括范围
        // [a-d[m-p]]a到d或者m到p
        // [a-z&&[def]] a-z和def的交集为 def
        // [a-z&&[^bc]] a-z与非bc的集合

        System.out.println("------------------1----------------");
        System.out.println("a".matches("[abc]"));//true
        System.out.println("z".matches("[abc]"));//false
        System.out.println("------------------2----------------");
        System.out.println("a".matches("[^abc]"));//false
        System.out.println("z".matches("[^abc]"));//true
        System.out.println("zz".matches("[^abc]"));//false
        System.out.println("zz".matches("[^abc][^abc]"));//true

        //预定义的字符
        // . 匹配任何字符
        // \d 一个数字[0-9]
        // \D 非数字:[^0-9]
        // \s 一个空白字符
        // \转义字符 改变后面后面字符原本的含义
        System.out.println("\"\"");//这里在""后面加一个\的时候 ""的特殊含义就被去掉了

        //表示任何一个字符 .
        System.out.println("你".matches(".."));//false
        System.out.println("你".matches("."));//true
        System.out.println("你a".matches(".."));//true

        // \\d是任意一位数字
        System.out.println("a".matches("\\d"));//不行 是一位非数字
        System.out.println("3".matches("\\d"));//可以 是一位且数字
        System.out.println("333".matches("\\d"));//不行 不是一位数字

        // \\w是一位单词字符
        System.out.println("z".matches("\\w"));//true
        System.out.println("2".matches("\\w"));//true
        System.out.println("21".matches("\\w"));//false
        System.out.println("你".matches("\\w"));//false
        // 非单词字符 \\W
        System.out.println("你".matches("\\W"));//true
        System.out.println("------------------------------------------------------------------------------");
        //必须是数字 字母 下划线 六位
        System.out.println("2442fsfsf".matches("\\w{6,}"));


    }

}
相关推荐
864记忆1 分钟前
Qt Sql 模块中的函数详解
开发语言·网络·qt
程序猿DD2 分钟前
深入探索剖析 JVM 的启动过程
java
是店小二呀11 分钟前
五分钟理解Rust的核心概念:所有权Rust
开发语言·后端·rust
她说人狗殊途14 分钟前
存储引擎MySQL
开发语言
自然数e20 分钟前
C++多线程【线程管控】之线程转移以及线程数量和ID
开发语言·c++·算法·多线程
Arva .22 分钟前
ConcurrentHashMap 的线程安全实现
java·开发语言
听风吟丶31 分钟前
Java 9+ 模块化系统(Jigsaw)实战:从 Jar 地狱到模块解耦的架构升级
java·架构·jar
昂子的博客33 分钟前
Redis缓存 更新策略 双写一致 缓存穿透 击穿 雪崩 解决方案... 一篇文章带你学透
java·数据库·redis·后端·spring·缓存
Dxy123931021633 分钟前
Python为什么要使用可迭代对象
开发语言·python
百***688234 分钟前
SpringBoot中Get请求和POST请求接收参数详解
java·spring boot·spring