java 正则表达式基础以及正则实现表单参数校验

版权声明:原创博文,转载请注明出处~ https://blog.csdn.net/She_lock/article/details/82259182

正则表达式初识

正则表达式定义了 字符串 的模式,可以用来搜索编辑处理文本

1、正则表达式并不仅限于某一种语言,但是在每种语言中有细微的差别。今天要讲的是 Java正则表达式

  • 一个字符串其实就是一个简单的正则表达式,例如 Hello World 正则表达式匹配"Hello World" 字符串
  • .(点号)也是一个正则表达式,它匹配任何一个字符如:"a""1"
  • \s+ 可以匹配一个或多个空格
  • ^ 定义了以什么开始
  • \d+ 匹配一个或多个数字
  • ? 设置括号内的选项是可选的
  • \. 匹配 "."

2、下表列出了一些正则表达式的实例及描述:

例1,匹配字符串"this is text"

this is text

例2:

this\s+is\s+text

注意字符串中的 \s+

匹配单词"this"后面的\s+ 可以匹配多个空格,之后匹配 "is" 字符串,再之后 \s+ 匹配多个空格然后再跟上 "text" 字符串。可以匹配这个实例:"this is text"

例3:

^\d+(\.\d+)?

^ 定义了以什么开始,\d+ 匹配一个或多个数字,? 设置括号内的选项是可选的,\.匹配 "."。所以这个正则可以匹配所有正数。可以匹配的实例:"5", "1.5""2.21"

3、捕获组
捕获组是把多个字符当一个单独单元进行处理的方法,它通过对括号内的字符分组来创建。

捕获组是通过从左至右计算其开括号来编号。例如,在表达式((A)(B(C))),有四个这样的组:

  • ((A)(B(C)))
  • (A)
  • (B(C))
  • (C)

例如:

    public static void main(String args[]){
        // 按指定模式在字符串查找
        String line = "This order was placed for QT3000! OK?";
        String pattern = "(\\D*)(\\d+)(.*)";

        // 创建 Pattern 对象
        Pattern r = Pattern.compile(pattern);

        // 现在创建 matcher 对象
        Matcher m = r.matcher(line);
        if (m.find( )) { //是否有匹配
            for (int i = 0;i<=m.groupCount();i++) {
                System.out.println("Found value: " + m.group(i) );//匹配的组
            }
        } else {
            System.out.println("NO MATCH");
        }
    }

打印结果:

Found value: This order was placed for QT3000! OK?
Found value: This order was placed for QT
Found value: 3000
Found value: ! OK?

正则表达式语法

在其他的语言中(如Perl),一个反斜杠 \ 就足以具有转义的作用,而在Java中正则表达式中则需要有两个反斜杠才能被解析为其他语言中的转义作用。
也可以简单的理解在 Java 的正则表达式中,两个 \\代表其他语言中的一个\,这也就是为什么表示一位数字的正则表达式是 \\d,而表示一个普通的反斜杠是 \\\\

  • \ : 将下一字符标记为特殊字符、文本、反向引用或八进制转义符。例如,"n"匹配字符"n""\n"匹配换行符。序列"\\\\"匹配"\\""\\("匹配"("

  • ^ : 匹配输入字符串开始的位置。如果设置了RegExp 对象的 Multiline 属性,^ 还会与"\n""\r"之后的位置匹配。

  • $ : 匹配输入字符串结尾的位置。如果设置了RegExp对象的Multiline 属性,$ 还会与"\n""\r"之前的位置匹配。

  • * : 零次或多次匹配前面的字符或子表达式。例如,zo* 匹配"z""zoo"* 等效于 {0,}

  • + : 一次或多次匹配前面的字符或子表达式。例如,"zo+""zo""zoo"匹配,但与"z"不匹配。+ 等效于{1,}

  • ? : 零次或一次匹配前面的字符或子表达式。例如,"do(es)?"匹配"do""does"中的"do"?等效于 {0,1}

  • {n}n 是非负整数。正好匹配 n 次。例如,"o{2}""Bob"中的"o"不匹配,但与"food"中的两个"o"匹配。

  • {n,}n是非负整数。至少匹配n次。例如,"o{2,}"不匹配"Bob"中的"o",而匹配"foooood"中的所有 o"o{1,}"等效于"o+""o{0,}"等效于"o*"

  • {n,m} :m 和 n 是非负整数,其中 n <= m。匹配至少 n 次,至多 m 次。例如,”o{1,3}”匹配”fooooood”中的头三个 o。’o{0,1}’ 等效于 ‘o?’。注意:您不能将空格插入逗号和数字之间。

  • ? : 当此字符紧随任何其他限定符(*、+、?、{n}、{n,}、{n,m})之后时,匹配模式是”非贪心的”。”非贪心的”模式匹配搜索到的、尽可能短的字符串,而默认的”贪心的”模式匹配搜索到的、尽可能长的字符串。例如,在字符串"oooo"中,"o+?"只匹配单个"o",而"o+"匹配所有"o"

  • . : 匹配除"\r\n"之外的任何单个字符。若要匹配包括"\r\n"在内的任意字符,请使用诸如"[\s\S]"之类的模式。

  • (pattern) : 匹配 pattern并捕获该匹配的子表达式。可以使用 $0…$9属性从结果”匹配”集合中检索捕获的匹配。若要匹配括号字符( ),请使用"\("或者"\)"

  • (?:pattern) : 匹配 pattern但不捕获该匹配的子表达式,即它是一个非捕获匹配,不存储供以后使用的匹配。这对于用"or"字符 (|)组合模式部件的情况很有用。例如,'industr(?:y|ies) 是比 'industry|industries' 更经济的表达式。

  • (?=pattern) : 执行正向预测先行搜索的子表达式,该表达式匹配处于匹配 pattern 的字符串的起始点的字符串。它是一个非捕获匹配,即不能捕获供以后使用的匹配。例如,'Windows (?=95|98|NT|2000)'匹配"Windows 2000"中的"Windows",但不匹配"Windows 3.1"中的"Windows"。预测先行不占用字符,即发生匹配后,下一匹配的搜索紧随上一匹配之后,而不是在组成预测先行的字符后。

  • (?!pattern) : 执行反向预测先行搜索的子表达式,该表达式匹配不处于匹配 pattern 的字符串的起始点的搜索字符串。它是一个非捕获匹配,即不能捕获供以后使用的匹配。例如,'Windows (?!95|98|NT|2000)'匹配"Windows 3.1"中的"Windows",但不匹配"Windows 2000"中的"Windows"。预测先行不占用字符,即发生匹配后,下一匹配的搜索紧随上一匹配之后,而不是在组成预测先行的字符后。

  • x|y : 匹配xy。例如,'z|food'匹配"z""food"'(z|f)ood'匹配"zood""food"

  • [xyz] : 字符集。匹配包含的任一字符。例如,"[abc]"匹配"plain"中的"a"

  • [^xyz] : 反向字符集。匹配未包含的任何字符。例如,"[^abc]"匹配"plain""p""l""i""n"

  • [a-z] : 字符范围。匹配指定范围内的任何字符。例如,"[a-z]"匹配"a""z"范围内的任何小写字母。

  • [^a-z] : 反向范围字符。匹配不在指定的范围内的任何字符。例如,"[^a-z]"匹配任何不在"a""z"范围内的任何字符。

  • \b : 匹配一个字边界,即字与空格间的位置。例如,"er\b"匹配"never"中的"er",但不匹配"verb"中的"er"

  • \B : 非字边界匹配。"er\B"匹配"verb"中的"er",但不匹配"never"中的"er"

  • \cx : 匹配 x指示的控制字符。例如,\cM 匹配 Control-M 或回车符。x 的值必须在 A-Za-z 之间。如果不是这样,则假定c 就是"c" 字符本身。

  • \d : 数字字符匹配。等效于[0-9]

  • \D:非数字字符匹配。等效于[^0-9]

  • \f : 换页符匹配。等效于\x0c\cL

  • \n: 换行符匹配。等效于\x0a\cJ

  • \r: 匹配一个回车符。等效于\x0d\cM

  • \s:匹配任何空白字符,包括空格、制表符、换页符等。与 [ \f\n\r\t\v]等效。

  • \S : 匹配任何非空白字符。与[^ \f\n\r\t\v]等效。

  • \t : 制表符匹配。与 \x09\cI 等效。

  • \v : 垂直制表符匹配。与\x0b\cK等效。

  • \w : 匹配任何字类字符,包括下划线。与"[A-Za-z0-9_]"等效。

  • \W : 与任何非单词字符匹配。与"[^A-Za-z0-9_]"等效。

  • \xn : 匹配n,此处的n是一个十六进制转义码。十六进制转义码必须正好是两位数长。例如,"\x41"匹配"A""\x041""\x04"&"1"等效。允许在正则表达式中使用 ASCII 代码。

  • \num : 匹配num,此处的num是一个正整数。到捕获匹配的反向引用。例如,"(.)\1"匹配两个连续的相同字符。

  • \n : 标识一个八进制转义码或反向引用。如果\n前面至少有 n 个捕获子表达式,那么 n 是反向引用。否则,如果n 是八进制数(0-7),那么 n 是八进制转义码。

  • \nm : 标识一个八进制转义码或反向引用。如果\nm前面至少有 nm 个捕获子表达式,那么 nm是反向引用。如果\nm 前面至少有 n 个捕获,则 n是反向引用,后面跟有字符 m。如果两种前面的情况都不存在,则 \nm 匹配八进制值nm,其中 nm 是八进制数字(0-7)

  • \nml : 当 n 是八进制数 (0-3)ml是八进制数 (0-7) 时,匹配八进制转义码nml

  • \un : 匹配 n,其中n是以四位十六进制数表示的Unicode 字符。例如,\u00A9匹配版权符号 (©)

java 实现

package com.sqlb.test;

import java.util.regex.*;

/**
 *正则参数校验
 */
public class ValidateUtils {
    /**
     * 整数.
     * "^" :匹配输入字符串开始的位置
     * "?": 零次或一次匹配前面的字符或子表达式
     * "[1-9]" : 1-9任意数字
     * "\\d" :数字,等效于[0-9]
     * "*" :零次或多次匹配前面的字符或子表达式
     * "$" :匹配输入字符串结尾的位置
     * 合起来就是:以 “-” 开头,“-”可以出现一次或零次,第一个数字非零,其他数字为0到9中的任意数字,可以出现出现零次或多次,以数字结尾。这不就是整数吗?
     */
    private static final String V_INTEGER = "^-?[1-9]\\d*$";

    /**
     * 正整数
     * 同理,以1到9的数字开头,其他数字是0到9中任意数字,可以出现多次或零次,并以数字结尾,即正整数
     */
    private static final String V_Z_INDEX = "^[1-9]\\d*$";

    /**
     * 负整数
     * 以“-”开头,紧跟着1到9中的任意数字,后面其他数字可以是0到9,可以出现多次或零次,以数字结尾,即负整数
     */
    private static final String V_NEGATIVE_INTEGER = "^-[1-9]\\d*$";

    /**
     * 数字
     * “[+-]”:字符集,可以是+ ,也可以是-
     * 同理,以+ 或是 - 开头,+和-可以出现1次或零次,后面有数字,有“.”,“.”可以出现0次或一次,后面又有数字,并以数字结尾,即所有数字,包括任意整数和小数
     */
    private static final String V_NUMBER = "^([+-]?)\\d*\\.?\\d+$";

    /**
     * 正数
     */
    private static final String V_POSITIVE_NUMBER = "^[1-9]\\d*|0$";

    /**
     * 负数
     */
    private static final String V_NEGATINE_NUMBER = "^-[1-9]\\d*|0$";

    /**
     * 浮点数
     */
    private static final String V_FLOAT = "^([+-]?)\\d*\\.\\d+$";

    /**
     * 正浮点数
     */
    private static final String V_POSTTIVE_FLOAT = "^[1-9]\\d*.\\d*|0.\\d*[1-9]\\d*$";

    /**
     * 负浮点数
     */
    private static final String V_NEGATIVE_FLOAT = "^-([1-9]\\d*.\\d*|0.\\d*[1-9]\\d*)$";

    /**
     * 非负浮点数(正浮点数 + 0)
     */
    private static final String V_UNPOSITIVE_FLOAT = "^[1-9]\\d*.\\d*|0.\\d*[1-9]\\d*|0?.0+|0$";

    /**
     * 非正浮点数(负浮点数 + 0)
     */
    private static final String V_UN_NEGATIVE_FLOAT = "^(-([1-9]\\d*.\\d*|0.\\d*[1-9]\\d*))|0?.0+|0$";

    /**
     * 邮件
     * “\\w”:匹配任何字类字符,包括下划线。"[A-Za-z0-9_]"
     * “+”,出现1次或多次
     * “((-\w+)|(\.\w+))*” 和 “((\.|-)[A-Za-z0-9]+)*” 可以出现0次或多次,这个这个地方不太明白是什么规则
     * “\@[A-Za-z0-9]+”出现@、或是任意字符,出现一次或多次,
     * “\.[A-Za-z0-9]+$” 出现“.”或任意字符,痴线一次或多次,然后结尾。
     * 可以看出,第一是“@”在“.”之前出现,字符开头,字符结尾,大概就是邮件的格式吧。
     */
    private static final String V_EMAIL = "^\\w+((-\\w+)|(\\.\\w+))*\\@[A-Za-z0-9]+((\\.|-)[A-Za-z0-9]+)*\\.[A-Za-z0-9]+$";

    /**
     * 颜色
     */
    private static final String V_COLOR = "^[a-fA-F0-9]{6}$";

    /**
     * url
     */
    private static final String V_URL = "^http[s]?:\\/\\/([\\w-]+\\.)+[\\w-]+([\\w-./?%&=]*)?$";

    /**
     * 仅中文
     */
    private static final String V_CHINESE = "^[\\u4E00-\\u9FA5\\uF900-\\uFA2D]+$";

    /**
     * 仅ACSII字符
     */
    private static final String V_ASCII = "^[\\x00-\\xFF]+$";

    /**
     * 邮编
     * "\\d" 表示[0-9],
     * "^" 匹配输入字符串开始的位置
     * "{6}" 表示匹配左边相邻字符或表达式6次
     * "$" 匹配输入字符串结尾的位置
     * 连起来就是以数字开头,以数字结尾 的6位数
     */
    private static final String V_ZIPCODE = "^\\d{6}$";

    /**
     * 手机
     * 以 1开头,后面是0到9,出现十次0到9中任意数字,即11位手机号码
     */
    private static final String V_MOBILE = "^(1)[0-9]{10}$";

    /**
     * ip地址
     */
    private static final String V_IP4 = "^(25[0-5]|2[0-4]\\d|[0-1]\\d{2}|[1-9]?\\d)\\.(25[0-5]|2[0-4]\\d|[0-1]\\d{2}|[1-9]?\\d)\\.(25[0-5]|2[0-4]\\d|[0-1]\\d{2}|[1-9]?\\d)\\.(25[0-5]|2[0-4]\\d|[0-1]\\d{2}|[1-9]?\\d)$";

    /**
     * 非空
     */
    private static final String V_NOTEMPTY = "^\\S+$";

    /**
     * 图片
     */
    private static final String V_PICTURE = "(.*)\\.(jpg|bmp|gif|ico|pcx|jpeg|tif|png|raw|tga)$";

    /**
     * 压缩文件
     */
    private static final String V_RAR = "(.*)\\.(rar|zip|7zip|tgz)$";

    /**
     * 日期
     */
    private static final String V_DATE = "^((((1[6-9]|[2-9]\\d)\\d{2})-(0?[13578]|1[02])-(0?[1-9]|[12]\\d|3[01]))|(((1[6-9]|[2-9]\\d)\\d{2})-(0?[13456789]|1[012])-(0?[1-9]|[12]\\d|30))|(((1[6-9]|[2-9]\\d)\\d{2})-0?2-(0?[1-9]|1\\d|2[0-8]))|(((1[6-9]|[2-9]\\d)(0[48]|[2468][048]|[13579][26])|((16|[2468][048]|[3579][26])00))-0?2-29-)) (20|21|22|23|[0-1]?\\d):[0-5]?\\d:[0-5]?\\d$";

    /**
     * QQ号码
     */
    private static final String V_QQ_NUMBER = "^[1-9]*[1-9][0-9]*$";

    /**
     * 电话号码的函数(包括验证国内区号,国际区号,分机号)
     */
    private static final String V_TEL = "^(([0\\+]\\d{2,3}-)?(0\\d{2,3})-)?(\\d{7,8})(-(\\d{3,}))?$";

    /**
     * 用来用户注册。匹配由数字、26个英文字母或者下划线组成的字符串
     */
    private static final String V_USERNAME = "^\\w+$";

    /**
     * 字母
     */
    private static final String V_LETTER = "^[A-Za-z]+$";

    /**
     * 大写字母
     */
    private static final String V_LETTER_U = "^[A-Z]+$";

    /**
     * 小写字母
     */
    private static final String V_LETTER_I = "^[a-z]+$";

    /**
     * 身份证
     */
    private static final String V_IDCARD = "^(\\d{15}$|^\\d{18}$|^\\d{17}(\\d|X|x))$";

    /**
     * 验证密码(数字和英文同时存在)
     */
    private static final String V_PASSWORD_REG = "[A-Za-z]+[0-9]";

    /**
     * 验证密码长度(6-18位)
     */
    private static final String V_PASSWORD_LENGTH = "^\\d{6,18}$";

    /**
     * 验证两位数
     */
    private static final String V_TWO_POINT = "^[0-9]+(.[0-9]{2})?$";

    /**
     * 验证一个月的31天
     */
    private static final String V_31DAYS = "^((0?[1-9])|((1|2)[0-9])|30|31)$";


    private ValidateUtils() {
    }


    /**
     * 验证是不是整数
     *
     * @param value 要验证的字符串 要验证的字符串
     * @return 如果是符合格式的字符串, 返回 <b>true </b>,否则为 <b>false </b>
     */
    public static boolean Integer(String value) {
        return match(V_INTEGER, value);
    }

    /**
     * 验证是不是正整数
     *
     * @param value 要验证的字符串
     * @return 如果是符合格式的字符串, 返回 <b>true </b>,否则为 <b>false </b>
     */
    public static boolean Z_index(String value) {
        return match(V_Z_INDEX, value);
    }

    /**
     * 验证是不是负整数
     *
     * @param value 要验证的字符串
     * @return 如果是符合格式的字符串, 返回 <b>true </b>,否则为 <b>false </b>
     */
    public static boolean Negative_integer(String value) {
        return match(V_NEGATIVE_INTEGER, value);
    }

    /**
     * 验证是不是数字
     *
     * @param value 要验证的字符串
     * @return 如果是符合格式的字符串, 返回 <b>true </b>,否则为 <b>false </b>
     */
    public static boolean Number(String value) {
        return match(V_NUMBER, value);
    }

    /**
     * 验证是不是正数
     *
     * @param value 要验证的字符串
     * @return 如果是符合格式的字符串, 返回 <b>true </b>,否则为 <b>false </b>
     */
    public static boolean PositiveNumber(String value) {
        return match(V_POSITIVE_NUMBER, value);
    }

    /**
     * 验证是不是负数
     *
     * @param value 要验证的字符串
     * @return 如果是符合格式的字符串, 返回 <b>true </b>,否则为 <b>false </b>
     */
    public static boolean NegatineNumber(String value) {
        return match(V_NEGATINE_NUMBER, value);
    }

    /**
     * 验证一个月的31天
     *
     * @param value 要验证的字符串
     * @return 如果是符合格式的字符串, 返回 <b>true </b>,否则为 <b>false </b>
     */
    public static boolean Is31Days(String value) {
        return match(V_31DAYS, value);
    }

    /**
     * 验证是不是ASCII
     *
     * @param value 要验证的字符串
     * @return 如果是符合格式的字符串, 返回 <b>true </b>,否则为 <b>false </b>
     */
    public static boolean ASCII(String value) {
        return match(V_ASCII, value);
    }


    /**
     * 验证是不是中文
     *
     * @param value 要验证的字符串
     * @return 如果是符合格式的字符串, 返回 <b>true </b>,否则为 <b>false </b>
     */
    public static boolean Chinese(String value) {
        return match(V_CHINESE, value);
    }


    /**
     * 验证是不是颜色
     *
     * @param value 要验证的字符串
     * @return 如果是符合格式的字符串, 返回 <b>true </b>,否则为 <b>false </b>
     */
    public static boolean Color(String value) {
        return match(V_COLOR, value);
    }


    /**
     * 验证是不是日期
     *
     * @param value 要验证的字符串
     * @return 如果是符合格式的字符串, 返回 <b>true </b>,否则为 <b>false </b>
     */
    public static boolean Date(String value) {
        return match(V_DATE, value);
    }

    /**
     * 验证是不是邮箱地址
     *
     * @param value 要验证的字符串
     * @return 如果是符合格式的字符串, 返回 <b>true </b>,否则为 <b>false </b>
     */
    public static boolean Email(String value) {
        return match(V_EMAIL, value);
    }

    /**
     * 验证是不是浮点数
     *
     * @param value 要验证的字符串
     * @return 如果是符合格式的字符串, 返回 <b>true </b>,否则为 <b>false </b>
     */
    public static boolean Float(String value) {
        return match(V_FLOAT, value);
    }

    /**
     * 验证是不是正确的身份证号码
     *
     * @param value 要验证的字符串
     * @return 如果是符合格式的字符串, 返回 <b>true </b>,否则为 <b>false </b>
     */
    public static boolean IDcard(String value) {
        return match(V_IDCARD, value);
    }

    /**
     * 验证是不是正确的IP地址
     *
     * @param value 要验证的字符串
     * @return 如果是符合格式的字符串, 返回 <b>true </b>,否则为 <b>false </b>
     */
    public static boolean IP4(String value) {
        return match(V_IP4, value);
    }

    /**
     * 验证是不是字母
     *
     * @param value 要验证的字符串
     * @return 如果是符合格式的字符串, 返回 <b>true </b>,否则为 <b>false </b>
     */
    public static boolean Letter(String value) {
        return match(V_LETTER, value);
    }

    /**
     * 验证是不是小写字母
     *
     * @param value 要验证的字符串
     * @return 如果是符合格式的字符串, 返回 <b>true </b>,否则为 <b>false </b>
     */
    public static boolean Letter_i(String value) {
        return match(V_LETTER_I, value);
    }


    /**
     * 验证是不是大写字母
     *
     * @param value 要验证的字符串
     * @return 如果是符合格式的字符串, 返回 <b>true </b>,否则为 <b>false </b>
     */
    public static boolean Letter_u(String value) {
        return match(V_LETTER_U, value);
    }


    /**
     * 验证是不是手机号码
     *
     * @param value 要验证的字符串
     * @return 如果是符合格式的字符串, 返回 <b>true </b>,否则为 <b>false </b>
     */
    public static boolean Mobile(String value) {
        return match(V_MOBILE, value);
    }

    /**
     * 验证是不是负浮点数
     *
     * @param value 要验证的字符串
     * @return 如果是符合格式的字符串, 返回 <b>true </b>,否则为 <b>false </b>
     */
    public static boolean Negative_float(String value) {
        return match(V_NEGATIVE_FLOAT, value);
    }

    /**
     * 验证非空
     *
     * @param value 要验证的字符串
     * @return 如果是符合格式的字符串, 返回 <b>true </b>,否则为 <b>false </b>
     */
    public static boolean Notempty(String value) {
        return match(V_NOTEMPTY, value);
    }

    /**
     * 验证密码的长度(6~18位)
     *
     * @param value 要验证的字符串
     * @return 如果是符合格式的字符串, 返回 <b>true </b>,否则为 <b>false </b>
     */
    public static boolean Number_length(String value) {
        return match(V_PASSWORD_LENGTH, value);
    }

    /**
     * 验证密码(数字和英文同时存在)
     *
     * @param value 要验证的字符串
     * @return 如果是符合格式的字符串, 返回 <b>true </b>,否则为 <b>false </b>
     */
    public static boolean Password_reg(String value) {
        return match(V_PASSWORD_REG, value);
    }

    /**
     * 验证图片
     *
     * @param value 要验证的字符串
     * @return 如果是符合格式的字符串, 返回 <b>true </b>,否则为 <b>false </b>
     */
    public static boolean Picture(String value) {
        return match(V_PICTURE, value);
    }

    /**
     * 验证正浮点数
     *
     * @param value 要验证的字符串
     * @return 如果是符合格式的字符串, 返回 <b>true </b>,否则为 <b>false </b>
     */
    public static boolean Posttive_float(String value) {
        return match(V_POSTTIVE_FLOAT, value);
    }

    /**
     * 验证QQ号码
     *
     * @param value 要验证的字符串
     * @return 如果是符合格式的字符串, 返回 <b>true </b>,否则为 <b>false </b>
     */
    public static boolean QQnumber(String value) {
        return match(V_QQ_NUMBER, value);
    }

    /**
     * 验证压缩文件
     *
     * @param value 要验证的字符串
     * @return 如果是符合格式的字符串, 返回 <b>true </b>,否则为 <b>false </b>
     */
    public static boolean Rar(String value) {
        return match(V_RAR, value);
    }

    /**
     * 验证电话
     *
     * @param value 要验证的字符串
     * @return 如果是符合格式的字符串, 返回 <b>true </b>,否则为 <b>false </b>
     */
    public static boolean Tel(String value) {
        return match(V_TEL, value);
    }

    /**
     * 验证两位小数
     *
     * @param value 要验证的字符串
     * @return 如果是符合格式的字符串, 返回 <b>true </b>,否则为 <b>false </b>
     */
    public static boolean Two_point(String value) {
        return match(V_TWO_POINT, value);
    }

    /**
     * 验证非正浮点数
     *
     * @param value 要验证的字符串
     * @return 如果是符合格式的字符串, 返回 <b>true </b>,否则为 <b>false </b>
     */
    public static boolean Un_negative_float(String value) {
        return match(V_UN_NEGATIVE_FLOAT, value);
    }

    /**
     * 验证非负浮点数
     *
     * @param value 要验证的字符串
     * @return 如果是符合格式的字符串, 返回 <b>true </b>,否则为 <b>false </b>
     */
    public static boolean Unpositive_float(String value) {
        return match(V_UNPOSITIVE_FLOAT, value);
    }

    /**
     * 验证URL
     *
     * @param value 要验证的字符串
     * @return 如果是符合格式的字符串, 返回 <b>true </b>,否则为 <b>false </b>
     */
    public static boolean Url(String value) {
        return match(V_URL, value);
    }

    /**
     * 验证用户注册。匹配由数字、26个英文字母或者下划线组成的字符串
     *
     * @param value 要验证的字符串
     * @return 如果是符合格式的字符串, 返回 <b>true </b>,否则为 <b>false </b>
     */
    public static boolean UserName(String value) {
        return match(V_USERNAME, value);
    }

    /**
     * 验证邮编
     *
     * @param value 要验证的字符串
     * @return 如果是符合格式的字符串, 返回 <b>true </b>,否则为 <b>false </b>
     */
    public static boolean Zipcode(String value) {
        return match(V_ZIPCODE, value);
    }

    /**
     * @param regex 正则表达式字符串
     * @param str   要匹配的字符串
     * @return 如果str 符合 regex的正则表达式格式,返回true, 否则返回 false;
     */
    private static boolean match(String regex, String str) {
        Pattern pattern = Pattern.compile(regex);
        Matcher matcher = pattern.matcher(str);
        return matcher.matches();
    }
}

猜你喜欢

转载自blog.csdn.net/She_lock/article/details/82259182