当前位置:   article > 正文

Android Java常用正则表达式_android开发数字、大小写字母的正则

android开发数字、大小写字母的正则

Android Java常用正则表达式

正则表达式定义字符串的搜索模式

正则表达式例子:

正则表达式描述

this is text

匹配字符串 “this is text”

this\s+is\s+text

注意字符串中的 \s+

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

可以匹配这个实例:this is text

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

^ 定义了以什么开始

\d+ 匹配一个或多个数字

? 设置括号内的选项是可选的

\. 匹配 “.”

可以匹配的实例:”5”, “1.5” 和 “2.21”。

 一.正则表达式规则:

1.常见的匹配符号:

正则表达式描述

.

匹配任何字符

^

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

$

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

[abc]

集定义,可以匹配字母A或B或C。例如,”[abc]”匹配”jian”中的”a”。。

[abc][vz]

集定义,可以匹配或B或C,接着为v或z。

[^abc]

向字符集。匹配未包含的任何字符。例如,”[^abc]”匹配”plain”中”p”,”l”,”i”,”n”。

[a-d1-7]

范围:从1到7 a和d和数字之间的匹配信,但不能匹配D1。

X|Z

查找X或Z

XZ

发现X直接跟着Z.

 2.元字符:

元字符有一个预先定义的含义,使某些共同的pattern更易于使用,例如 \d 代替 [0..9]。

正则表达式描述

\d

数字字符匹配。等效于 [0-9]。]

\D

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

\s

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

\S

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

\w

垂直制表符匹配。与 \x0b 和 \cK 等效。

\W

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

\S

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

\b

匹配一个单词边界,单词字符是 [a-zA-Z0-9_]

 

元字符描述
\将下一个字符标记为一个特殊字符、或一个原义字符、或一个向后引用、或一个八进制转义符。例如,“\n”匹配字符“n”。“\\n”匹配一个换行符。序列“\\”匹配“\”而“\(”则匹配“(”。
^匹配输入字符串的开始位置。如果设置了RegExp对象的Multiline属性,^也匹配“\n”或“\r”之后的位置。
$匹配输入字符串的结束位置。如果设置了RegExp对象的Multiline属性,$也匹配“\n”或“\r”之前的位置。
*匹配前面的子表达式零次或多次。例如,zo*能匹配“z”以及“zoo”。*等价于{0,}。
+匹配前面的子表达式一次或多次。例如,“zo+”能匹配“zo”以及“zoo”,但不能匹配“z”。+等价于{1,}。
?匹配前面的子表达式零次或一次。例如,“do(es)?”可以匹配“does”或“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”。
.点匹配除“\n”之外的任何单个字符。要匹配包括“\n”在内的任何字符,请使用像“[\s\S]”的模式。
(pattern)匹配pattern并获取这一匹配。所获取的匹配可以从产生的Matches集合得到,在VBScript中使用SubMatches集合,在JScript中则使用$0…$9属性。要匹配圆括号字符,请使用“”。
(?:pattern)匹配pattern但不获取匹配结果,也就是说这是一个非获取匹配,不进行存储供以后使用。这在使用或字符“(|)”来组合一个模式的各个部分是很有用。例如“industr(?:y|ies)”就是一个比“industry|industries”更简略的表达式。
(?=pattern)正向肯定预查,在任何匹配pattern的字符串开始处匹配查找字符串。这是一个非获取匹配,也就是说,该匹配不需要获取供以后使用。例如,“Windows(?=95|98|NT|2000)”能匹配“Windows2000”中的“Windows”,但不能匹配“Windows3.1”中的“Windows”。预查不消耗字符,也就是说,在一个匹配发生后,在最后一次匹配之后立即开始下一次匹配的搜索,而不是从包含预查的字符之后开始。
(?!pattern)正向否定预查,在任何不匹配pattern的字符串开始处匹配查找字符串。这是一个非获取匹配,也就是说,该匹配不需要获取供以后使用。例如“Windows(?!95|98|NT|2000)”能匹配“Windows3.1”中的“Windows”,但不能匹配“Windows2000”中的“Windows”。
(?<=pattern)反向肯定预查,与正向肯定预查类似,只是方向相反。例如,“(?<=95|98|NT|2000)Windows”能匹配“2000Windows”中的“Windows”,但不能匹配“3.1Windows”中的“Windows”。
(?反向否定预查,与正向否定预查类似,只是方向相反。例如“(?
x|y匹配x或y。例如,“z|food”能匹配“z”或“food”。“(z|f)ood”则匹配“zood”或“food”。
[xyz]字符集合。匹配所包含的任意一个字符。例如,“[abc]”可以匹配“plain”中的“a”。
[^xyz]负值字符集合。匹配未包含的任意字符。例如,“[^abc]”可以匹配“plain”中的“plin”。
[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-Z或a-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的向后引用。如果前面的条件都不满足,若n和m均为八进制数字(0-7),则\nm将匹配八进制转义值nm。
\nml如果n为八进制数字(0-7),且m和l均为八进制数字(0-7),则匹配八进制转义值nml。
\un匹配n,其中n是一个用四个十六进制数字表示的Unicode字符。例如,\u00A9匹配版权符号(©)。

 3.量化:

量词定义如何经常可以发生的元素。{}的符号?,*,+,并定义正则表达式的数量

正则表达式描述例子

*

出现零次或更多次,等效于{0,} ,例如,jia* 匹配”ji”和”jian”{0,}

X*X *0个或多个字母X,。*找到任何字符序列

+

发生一次或多次,是{1,}的缩写 {1,}

X+ - 找到一个或几个字母X

?

没有发生次或一次,?是{0,1}的缩写。

X? 未找到或只有一个字母X

{X}

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

\d{3}搜索三位数字,.{10}对于长度为10的任何字符序列。

{X,Y}

X和Y之间发生,

\d{1,4}\d出现至少一次,并最多出现四个。

*?

?后一个量词使其成为一个不贪婪的量词。它试图找到最小的匹配。。

 

二.常用正则表达式总结:

1.校验数字的表达式:

  1. 1 数字:^[0-9]*$
  2. 2 n位的数字:^\d{n}$
  3. 3 至少n位的数字:^\d{n,}$
  4. 4 m-n位的数字:^\d{m,n}$
  5. 5 零和非零开头的数字:^(0|[1-9][0-9]*)$
  6. 6 非零开头的最多带两位小数的数字:^([1-9][0-9]*)+(.[0-9]{1,2})?$
  7. 71-2位小数的正数或负数:^(\-)?\d+(\.\d{1,2})?$
  8. 8 正数、负数、和小数:^(\-|\+)?\d+(\.\d+)?$
  9. 9 有两位小数的正实数:^[0-9]+(.[0-9]{2})?$
  10. 101~3位小数的正实数:^[0-9]+(.[0-9]{1,3})?$
  11. 11 非零的正整数:^[1-9]\d*$ 或 ^([1-9][0-9]*){1,3}$ 或 ^\+?[1-9][0-9]*$
  12. 12 非零的负整数:^\-[1-9][]0-9"*$ 或 ^-[1-9]\d*$
  13. 13 非负整数:^\d+$ 或 ^[1-9]\d*|0$
  14. 14 非正整数:^-[1-9]\d*|0$ 或 ^((-\d+)|(0+))$
  15. 15 非负浮点数:^\d+(\.\d+)?$ 或 ^[1-9]\d*\.\d*|0\.\d*[1-9]\d*|0?\.0+|0$
  16. 16 非正浮点数:^((-\d+(\.\d+)?)|(0+(\.0+)?))$ 或 ^(-([1-9]\d*\.\d*|0\.\d*[1-9]\d*))|0?\.0+|0$
  17. 17 正浮点数:^[1-9]\d*\.\d*|0\.\d*[1-9]\d*$ 或 ^(([0-9]+\.[0-9]*[1-9][0-9]*)|([0-9]*[1-9][0-9]*\.[0-9]+)|([0-9]*[1-9][0-9]*))$
  18. 18 负浮点数:^-([1-9]\d*\.\d*|0\.\d*[1-9]\d*)$ 或 ^(-(([0-9]+\.[0-9]*[1-9][0-9]*)|([0-9]*[1-9][0-9]*\.[0-9]+)|([0-9]*[1-9][0-9]*)))$
  19. 19 浮点数:^(-?\d+)(\.\d+)?$ 或 ^-?([1-9]\d*\.\d*|0\.\d*[1-9]\d*|0?\.0+|0)$

2.验证字符的表达式:

  1. 1 汉字:^[\u4e00-\u9fa5]{0,}$
  2. 2 英文和数字:^[A-Za-z0-9]+$ 或 ^[A-Za-z0-9]{4,40}$
  3. 3 长度为3-20的所有字符:^.{3,20}$
  4. 426个英文字母组成的字符串:^[A-Za-z]+$
  5. 526个大写英文字母组成的字符串:^[A-Z]+$
  6. 626个小写英文字母组成的字符串:^[a-z]+$
  7. 7 由数字和26个英文字母组成的字符串:^[A-Za-z0-9]+$
  8. 8 由数字、26个英文字母或者下划线组成的字符串:^\w+$ 或 ^\w{3,20}$
  9. 9 中文、英文、数字包括下划线:^[\u4E00-\u9FA5A-Za-z0-9_]+$
  10. 10 中文、英文、数字但不包括下划线等符号:^[\u4E00-\u9FA5A-Za-z0-9]+$ 或 ^[\u4E00-\u9FA5A-Za-z0-9]{2,20}$
  11. 11 可以输入含有^%&',;=?$\"等字符:[^%&',;=?$\x22]+
  12. 12 禁止输入含有~的字符:[^~\x22]+

3.特殊需求表达式:

  1. 1 Email地址:^\w+([-+.]\w+)*@\w+([-.]\w+)*\.\w+([-.]\w+)*$
  2. 2 域名:[a-zA-Z0-9][-a-zA-Z0-9]{0,62}(/.[a-zA-Z0-9][-a-zA-Z0-9]{0,62})+/.?
  3. 3 InternetURL:[a-zA-z]+://[^\s]* 或 ^http://([\w-]+\.)+[\w-]+(/[\w-./?%&=]*)?$
  4. 4 手机号码:^(13[0-9]|14[5|7]|15[0|1|2|3|5|6|7|8|9]|18[0|1|2|3|5|6|7|8|9])\d{8}$
  5. 5 电话号码("XXX-XXXXXXX""XXXX-XXXXXXXX""XXX-XXXXXXX""XXX-XXXXXXXX""XXXXXXX""XXXXXXXX):^(\(\d{3,4}-)|\d{3.4}-)?\d{7,8}$
  6. 6 国内电话号码(0511-4405222、021-87888822):\d{3}-\d{8}|\d{4}-\d{7}
  7. 7 身份证号(15位、18位数字):^\d{15}|\d{18}$
  8. 8 短身份证号码(数字、字母x结尾):^([0-9]){7,18}(x|X)?$ 或 ^\d{8,18}|[0-9x]{8,18}|[0-9X]{8,18}?$
  9. 9 帐号是否合法(字母开头,允许5-16字节,允许字母数字下划线):^[a-zA-Z][a-zA-Z0-9_]{4,15}$
  10. 10 密码(以字母开头,长度在6~18之间,只能包含字母、数字和下划线):^[a-zA-Z]\w{5,17}$
  11. 11 强密码(必须包含大小写字母和数字的组合,不能使用特殊字符,长度在8-10之间):^(?=.*\d)(?=.*[a-z])(?=.*[A-Z]).{8,10}$
  12. 12 日期格式:^\d{4}-\d{1,2}-\d{1,2}
  13. 13 一年的12个月(01~09和1~12):^(0?[1-9]|1[0-2])$
  14. 14 一个月的31天(01~09和1~31):^((0?[1-9])|((1|2)[0-9])|30|31)$
  15. 15 钱的输入格式:
  16. 16 1.有四种钱的表示形式我们可以接受:"10000.00" 和 "10,000.00", 和没有 "" 的 "10000" 和 "10,000":^[1-9][0-9]*$
  17. 17 2.这表示任意一个不以0开头的数字,但是,这也意味着一个字符"0"不通过,所以我们采用下面的形式:^(0|[1-9][0-9]*)$
  18. 18 3.一个0或者一个不以0开头的数字.我们还可以允许开头有一个负号:^(0|-?[1-9][0-9]*)$
  19. 19 4.这表示一个0或者一个可能为负的开头不为0的数字.让用户以0开头好了.把负号的也去掉,因为钱总不能是负的吧.下面我们要加的是说明可能的小数部分:^[0-9]+(.[0-9]+)?$
  20. 20 5.必须说明的是,小数点后面至少应该有1位数,所以"10."是不通过的,但是 "10" 和 "10.2" 是通过的:^[0-9]+(.[0-9]{2})?$
  21. 21 6.这样我们规定小数点后面必须有两位,如果你认为太苛刻了,可以这样:^[0-9]+(.[0-9]{1,2})?$
  22. 22 7.这样就允许用户只写一位小数.下面我们该考虑数字中的逗号了,我们可以这样:^[0-9]{1,3}(,[0-9]{3})*(.[0-9]{1,2})?$
  23. 23 8.1到3个数字,后面跟着任意个 逗号+3个数字,逗号成为可选,而不是必须:^([0-9]+|[0-9]{1,3}(,[0-9]{3})*)(.[0-9]{1,2})?$
  24. 24 备注:这就是最终结果了,别忘了"+"可以用"*"替代如果你觉得空字符串也可以接受的话(奇怪,为什么?)最后,别忘了在用函数时去掉去掉那个反斜杠,一般的错误都在这里
  25. 25 xml文件:^([a-zA-Z]+-?)+[a-zA-Z0-9]+\\.[x|X][m|M][l|L]$
  26. 26 中文字符的正则表达式:[\u4e00-\u9fa5]
  27. 27 双字节字符:[^\x00-\xff] (包括汉字在内,可以用来计算字符串的长度(一个双字节字符长度计2,ASCII字符计1))
  28. 28 空白行的正则表达式:\n\s*\r (可以用来删除空白行)
  29. 29 HTML标记的正则表达式:<(\S*?)[^>]*>.*?</\1>|<.*? /> (网上流传的版本太糟糕,上面这个也仅仅能部分,对于复杂的嵌套标记依旧无能为力)
  30. 30 首尾空白字符的正则表达式:^\s*|\s*$或(^\s*)|(\s*$) (可以用来删除行首行尾的空白字符(包括空格、制表符、换页符等等),非常有用的表达式)
  31. 31 腾讯QQ号:[1-9][0-9]{4,} (腾讯QQ号从10000开始)
  32. 32 中国邮政编码:[1-9]\d{5}(?!\d) (中国邮政编码为6位数字)
  33. 33 IP地址:\d+\.\d+\.\d+\.\d+ (提取IP地址时有用)
  34. 34 IP地址:((?:(?:25[0-5]|2[0-4]\\d|[01]?\\d?\\d)\\.){3}(?:25[0-5]|2[0-4]\\d|[01]?\\d?\\d)) (由@飞龙三少 提供,感谢共享)

4.正则表达式的使用:

java.util.regex 包主要包括以下三个类:

  • Pattern 类:

pattern 对象是一个正则表达式的编译表示。Pattern 类没有公共构造方法。要创建一个 Pattern 对象,你必须首先调用其公共静态编译方法,它返回一个 Pattern 对象。该方法接受一个正则表达式作为它的第一个参数。

  • Matcher 类:

Matcher 对象是对输入字符串进行解释和匹配操作的引擎。与Pattern 类一样,Matcher 也没有公共构造方法。你需要调用 Pattern 对象的 matcher 方法来获得一个 Matcher 对象。

  • PatternSyntaxException:

PatternSyntaxException 是一个非强制异常类,它表示一个正则表达式模式中的语法错误。

RegexUtil工具源码:

  1. /**
  2. * 正则工具类-http://blog.csdn.net/xyang81/article/details/7706408
  3. * 提供验证邮箱、手机号、电话号码、身份证号码、数字等方法
  4. */
  5. public final class RegexUtil {
  6. /**
  7. * 手机号码,中间4位星号替换
  8. *
  9. * @param phone 手机号
  10. * @return 星号替换的手机号
  11. */
  12. public static String phoneNoHide(String phone) {
  13. // 括号表示组,被替换的部分$n表示第n组的内容
  14. // 正则表达式中,替换字符串,括号的意思是分组,在replace()方法中,
  15. // 参数二中可以使用$n(n为数字)来依次引用模式串中用括号定义的字串。
  16. // "(\d{3})\d{4}(\d{4})", "$1****$2"的这个意思就是用括号,
  17. // 分为(前3个数字)中间4个数字(最后4个数字)替换为(第一组数值,保持不变$1)(中间为*)(第二组数值,保持不变$2)
  18. return phone.replaceAll("(\\d{3})\\d{4}(\\d{4})", "$1****$2");
  19. }
  20. /**
  21. * 银行卡号,保留最后4位,其他星号替换
  22. *
  23. * @param cardId 卡号
  24. * @return 星号替换的银行卡号
  25. */
  26. public static String cardIdHide(String cardId) {
  27. return cardId.replaceAll("\\d{15}(\\d{3})", "**** **** **** **** $1");
  28. }
  29. /**
  30. * 身份证号,中间10位星号替换
  31. *
  32. * @param id 身份证号
  33. * @return 星号替换的身份证号
  34. */
  35. public static String idHide(String id) {
  36. return id.replaceAll("(\\d{4})\\d{10}(\\d{4})", "$1** **** ****$2");
  37. }
  38. /**
  39. * 是否为车牌号(沪A88888)
  40. *
  41. * @param vehicleNo 车牌号
  42. * @return 是否为车牌号
  43. */
  44. public static boolean checkVehicleNo(String vehicleNo) {
  45. Pattern pattern = Pattern.compile("^[\u4e00-\u9fa5]{1}[a-zA-Z]{1}[a-zA-Z_0-9]{5}$");
  46. return pattern.matcher(vehicleNo).find();
  47. }
  48. /**
  49. * 验证身份证号码
  50. *
  51. * @param idCard 居民身份证号码15位或18位,最后一位可能是数字或字母
  52. * @return 验证成功返回true,验证失败返回false
  53. */
  54. public static boolean checkIdCard(String idCard) {
  55. String regex = "[1-9]\\d{13,16}[a-zA-Z0-9]{1}";
  56. return Pattern.matches(regex, idCard);
  57. }
  58. /**
  59. * 验证手机号码(支持国际格式,+86135xxxx...(中国内地),+00852137xxxx...(中国香港))
  60. *
  61. * @param mobile 移动、联通、电信运营商的号码段
  62. * <p>移动的号段:134(0-8)、135、136、137、138、139、147(预计用于TD上网卡)
  63. * 、150、151、152、157(TD专用)、158、159、187(未启用)、188(TD专用)</p>
  64. * <p>联通的号段:130、131、132、155、156(世界风专用)、185(未启用)、186(3g)</p>
  65. * <p>电信的号段:133、153、180(未启用)、189</p>
  66. * @return 验证成功返回true,验证失败返回false
  67. */
  68. public static boolean checkMobile(String mobile) {
  69. String regex = "(\\+\\d+)?1[3458]\\d{9}$";
  70. return Pattern.matches(regex, mobile);
  71. }
  72. /**
  73. * 验证固定电话号码
  74. *
  75. * @param phone 电话号码,格式:国家(地区)电话代码 + 区号(城市代码) + 电话号码,如:+8602085588447
  76. * <p><b>国家(地区) 代码 :</b>标识电话号码的国家(地区)的标准国家(地区)代码。它包含从 0 到 9 的一位或多位数字,
  77. * 数字之后是空格分隔的国家(地区)代码。</p>
  78. * <p><b>区号(城市代码):</b>这可能包含一个或多个从 0 到 9 的数字,地区或城市代码放在圆括号——
  79. * 对不使用地区或城市代码的国家(地区),则省略该组件。</p>
  80. * <p><b>电话号码:</b>这包含从 0 到 9 的一个或多个数字 </p>
  81. * @return 验证成功返回true,验证失败返回false
  82. */
  83. public static boolean checkPhone(String phone) {
  84. String regex = "(\\+\\d+)?(\\d{3,4}\\-?)?\\d{7,8}$";
  85. return Pattern.matches(regex, phone);
  86. }
  87. /**
  88. * 验证Email
  89. *
  90. * @param email email地址,格式:zhangsan@sina.com,zhangsan@xxx.com.cn,xxx代表邮件服务商
  91. * @return 验证成功返回true,验证失败返回false
  92. */
  93. public static boolean checkEmail(String email) {
  94. String regex = "\\w+@\\w+\\.[a-z]+(\\.[a-z]+)?";
  95. return Pattern.matches(regex, email);
  96. }
  97. /**
  98. * 验证整数(正整数和负整数)
  99. *
  100. * @param digit 一位或多位0-9之间的整数
  101. * @return 验证成功返回true,验证失败返回false
  102. */
  103. public static boolean checkDigit(String digit) {
  104. String regex = "\\-?[1-9]\\d+";
  105. return Pattern.matches(regex, digit);
  106. }
  107. /**
  108. * 验证整数和浮点数(正负整数和正负浮点数)
  109. *
  110. * @param decimals 一位或多位0-9之间的浮点数,如:1.23,233.30
  111. * @return 验证成功返回true,验证失败返回false
  112. */
  113. public static boolean checkDecimals(String decimals) {
  114. String regex = "\\-?[1-9]\\d+(\\.\\d+)?";
  115. return Pattern.matches(regex, decimals);
  116. }
  117. /**
  118. * 验证空白字符
  119. *
  120. * @param blankSpace 空白字符,包括:空格、\t、\n、\r、\f、\x0B
  121. * @return 验证成功返回true,验证失败返回false
  122. */
  123. public static boolean checkBlankSpace(String blankSpace) {
  124. String regex = "\\s+";
  125. return Pattern.matches(regex, blankSpace);
  126. }
  127. /**
  128. * 验证中文
  129. *
  130. * @param chinese 中文字符
  131. * @return 验证成功返回true,验证失败返回false
  132. */
  133. public static boolean checkChinese(String chinese) {
  134. String regex = "^[\u4E00-\u9FA5]+$";
  135. return Pattern.matches(regex, chinese);
  136. }
  137. /**
  138. * 验证日期(年月日)
  139. *
  140. * @param birthday 日期,格式:1992-09-03,或1992.09.03
  141. * @return 验证成功返回true,验证失败返回false
  142. */
  143. public static boolean checkBirthday(String birthday) {
  144. String regex = "[1-9]{4}([-./])\\d{1,2}\\1\\d{1,2}";
  145. return Pattern.matches(regex, birthday);
  146. }
  147. /**
  148. * 验证URL地址
  149. *
  150. * @param url 格式:http://blog.csdn.net/gdutxiaoxu/article/details/71732642或 http://www.csdn.net:80
  151. * @return 验证成功返回true,验证失败返回false
  152. */
  153. public static boolean checkURL(String url) {
  154. String regex = "(https?://(w{3}\\.)?)?\\w+\\.\\w+(\\.[a-zA-Z]+)*(:\\d{1,5})?(/\\w*)*(\\??(.+=.*)?(&.+=.*)?)?";
  155. return Pattern.matches(regex, url);
  156. }
  157. /**
  158. * 匹配中国邮政编码
  159. *
  160. * @param postcode 邮政编码
  161. * @return 验证成功返回true,验证失败返回false
  162. */
  163. public static boolean checkPostcode(String postcode) {
  164. String regex = "[1-9]\\d{5}";
  165. return Pattern.matches(regex, postcode);
  166. }
  167. /**
  168. * 匹配IP地址(简单匹配,格式,如:192.168.1.1,127.0.0.1,没有匹配IP段的大小)
  169. *
  170. * @param ipAddress IPv4标准地址
  171. * @return 验证成功返回true,验证失败返回false
  172. */
  173. public static boolean checkIpAddress(String ipAddress) {
  174. String regex = "[1-9](\\d{1,2})?\\.(0|([1-9](\\d{1,2})?))\\.(0|([1-9](\\d{1,2})?))\\.(0|([1-9](\\d{1,2})?))";
  175. return Pattern.matches(regex, ipAddress);
  176. }
  177. }

日期验证,判断8位数字日期是否正确:

  1. /**
  2. * 判断是否为正常的8位数字日期:20201212
  3. * @param string
  4. * @return
  5. */
  6. private static boolean getDateStatue(String string){
  7. return string.matches("^((\\d{2}(([02468][048])|([13579][26]))[\\s]?((((0?\" +\"[13578])|(1[02]))[\\s]?((0?[1-9])|([1-2][0-9])|(3[01])))\" +\"|(((0?[469])|(11))[\\s]?((0?[1-9])|([1-2][0-9])|(30)))|\" +\"(0?2[\\s]?((0?[1-9])|([1-2][0-9])))))|(\\\\d{2}(([02468][12\" +\"35679])|([13579][01345789]))[\\\\s]?((((0?[13578])|(1[02]))\" +\"[\\\\s]?((0?[1-9])|([1-2][0-9])|(3[01])))|(((0?[469])|(11))\" +\"[\\s]?((0?[1-9])|([1-2][0-9])|(30)))|(0?2[\\s]?((0?[\" +\"1-9])|(1[0-9])|(2[0-8]))))))");
  8. }
  1. 将平年和闰年的日期验证表达式合并,最终的验证日期格式为YYYY-MM-DD (如:1919-09-09)的正则表达式为:
  2. "(([0-9]{3}[1-9]|[0-9]{2}[1-9][0-9]{1}|[0-9]{1}[1-9][0-9]{2}|[1-9][0-9]{3})-(((0[13578]|1[02])-(0[1-9]|[12][0-9]|3[01]))|((0[469]|11)-(0[1-9]|[12][0-9]|30))|(02-(0[1-9]|[1][0-9]|2[0-8]))))|((([0-9]{2})(0[48]|[2468][048]|[13579][26])|((0[48]|[2468][048]|[3579][26])00))-02-29)"
  3. 将平年和闰年的日期验证表达式合并,最终的验证日期格式为YYYYMMDD (如:19190909)的正则表达式为:
  4. return string.matches("(([0-9]{3}[1-9]|[0-9]{2}[1-9][0-9]{1}|[0-9]{1}[1-9][0-9]{2}|[1-9][0-9]{3})(((0[13578]|1[02])(0[1-9]|[12][0-9]|3[01]))|((0[469]|11)(0[1-9]|[12][0-9]|30))|(02(0[1-9]|[1][0-9]|2[0-8]))))|((([0-9]{2})(0[48]|[2468][048]|[13579][26])|((0[48]|[2468][048]|[3579][26])00))0229)");
  5. 闰年的2月份有29天,匹配闰年日期格式为YYYY-MM-DD的正则表达式为:
  6. (([0-9]{2})(0[48]|[2468][048]|[13579][26])|((0[48]|[2468][048]|[3579][26])00))-02-29
  7. DD/MM/YYYY格式的正则验证表达式为:
  8. (((0[1-9]|[12][0-9]|3[01])/((0[13578]|1[02]))|((0[1-9]|[12][0-9]|30)/(0[469]|11))|(0[1-9]|[1][0-9]|2[0-8])/(02))/([0-9]{3}[1-9]|[0-9]{2}[1-9][0-9]{1}|[0-9]{1}[1-9][0-9]{2}|[1-9][0-9]{3}))|(29/02/(([0-9]{2})(0[48]|[2468][048]|[13579][26])|((0[48]|[2468][048]|[3579][26])00)))

 

  1. //Pattern p = Pattern.compile("^((\\d{2}(([02468][048])|([13579][26]))[\\/\\/\\s]?((((0?"+"[13578])|(1[02]))[\\/\\/\\s]?((0?[1-9])|([1-2][0-9])|(3[01])))" +"|(((0?[469])|(11))[\\/\\/\\s]?((0?[1-9])|([1-2][0-9])|(30)))|" +"(0?2[\\/\\/\\s]?((0?[1-9])|([1-2][0-9])))))|(\\d{2}(([02468][12"+"35679])|([13579][01345789]))[\\/\\/\\s]?((((0?[13578])|(1[02]))" +"[\\/\\/\\s]?((0?[1-9])|([1-2][0-9])|(3[01])))|(((0?[469])|(11))" +"[\\/\\/\\s]?((0?[1-9])|([1-2][0-9])|(30)))|(0?2[\\/\\/\\s]?((0?[" +"1-9])|(1[0-9])|(2[0-8]))))))");
  2. Pattern p = Pattern.compile("^((\\d{2}(([02468][048])|([13579][26]))[\\-\\-\\s]?((((0?" +"[13578])|(1[02]))[\\-\\-\\s]?((0?[1-9])|([1-2][0-9])|(3[01])))" +"|(((0?[469])|(11))[\\-\\-\\s]?((0?[1-9])|([1-2][0-9])|(30)))|" +"(0?2[\\-\\-\\s]?((0?[1-9])|([1-2][0-9])))))|(\\d{2}(([02468][12" +"35679])|([13579][01345789]))[\\-\\-\\s]?((((0?[13578])|(1[02]))" +"[\\-\\-\\s]?((0?[1-9])|([1-2][0-9])|(3[01])))|(((0?[469])|(11))" +"[\\-\\-\\s]?((0?[1-9])|([1-2][0-9])|(30)))|(0?2[\\-\\-\\s]?((0?[" +"1-9])|(1[0-9])|(2[0-8]))))))");
  3. //如:2020-08-08 2020/08/08

 

  1. Pattern p = Pattern.compile("^((\\d{2}(([02468][048])|([13579][26]))[\\-\\/\\s]?((((0?[13578])|(1[02]))[\\-\\/\\s]?((0?[1-9])|([1-2][0-9])|(3[01])))|(((0?[469])|(11))[\\-\\/\\s]?((0?[1-9])|([1-2][0-9])|(30)))|(0?2[\\-\\/\\s]?((0?[1-9])|([1-2][0-9])))))|(\\d{2}(([02468][1235679])|([13579][01345789]))[\\-\\/\\s]?((((0?[13578])|(1[02]))[\\-\\/\\s]?((0?[1-9])|([1-2][0-9])|(3[01])))|(((0?[469])|(11))[\\-\\/\\s]?((0?[1-9])|([1-2][0-9])|(30)))|(0?2[\\-\\/\\s]?((0?[1-9])|(1[0-9])|(2[0-8]))))))(\\s(((0?[0-9])|([1-2][0-3]))\\:([0-5]?[0-9])((\\s)|(\\:([0-5]?[0-9])))))?$");
  2. //如:"2020-12-12 23:59:59"
  1. //验证的字符串中某个位置的值为固定值,某个字符只出现一次
  2. //表示从起始位开始,前三位是0-9的任意整数,第四位是1,最后四位是0-2的任意整数;
  3. boolean a = str.matches("^[0-9]{3}+1+[0-2]{4}");
  4. ^[0]*[1]{1}[0]*$:表示从起始位开始,整个字符串只有一个1,*表示匹配任意位数,这种情况要限制字符串长度在vo里面可以用@length
  5. //验证的字符,数字串在某个范围内,且位数固定
  6. ^[0-9A-Za-z]{n}:表示从起始位开始后面的每一位都只能是数字和a-z的大写或小写字母,可以根据需求设置范围,{n}表示整个字符串的长度为n;
  7. ^[0-9A-Za-z]{n,}:表示整个字符串的长度最小为n

判断纯整数数字的写法:如:082020080820200808889920200808569

下面每个加号+分隔一种数字的约束:

0   :表示第一位是0;

[1-6]{1}  :表示1到6范围,只能输入一位数字,其它类似;

 boolean date = str.matches("^0+[1-6]{1}+[0-9]{8}+[0-9]{8}+[0-9]{2}+[0-9]{2}+[0-9]{8}+[0-9]{3}");

 

 

相关:

https://link.jianshu.com/?t=https://github.com/gdutxiaoxu/CommonLibrary

https://www.runoob.com/java/java-regular-expressions.html

https://blog.csdn.net/qq_43563538/article/details/105550684

https://www.cnblogs.com/mgod/archive/2007/04/26/728628.html

 

 

 

 

 

 

 

 

 

 

 

 

声明:本文内容由网友自发贡献,不代表【wpsshop博客】立场,版权归原作者所有,本站不承担相应法律责任。如您发现有侵权的内容,请联系我们。转载请注明出处:https://www.wpsshop.cn/w/Monodyee/article/detail/286400
推荐阅读
相关标签
  

闽ICP备14008679号