[正则表达式]文本框输入内容控制
整数或者小数:^[0-9]+\.{0,1}[0-9]{0,2}$
只能输入数字:"^[0-9]*$"。
只能输入n位的数字:"^\d{n}$"。
只能输入至少n位的数字:"^\d{n,}$"。
只能输入m~n位的数字:。"^\d{m,n}$"
只能输入零和非零开头的数字:"^(0|[1-9][0-9]*)$"。
只能输入有两位小数的正实数:"^[0-9]+(.[0-9]{2})?$"。
只能输入有1~3位小数的正实数:"^[0-9]+(.[0-9]{1,3})?$"。
只能输入非零的正整数:"^\+?[1-9][0-9]*$"。
只能输入非零的负整数:"^\-[1-9][]0-9"*$。
只能输入长度为3的字符:"^.{3}$"。
只能输入由26个英文字母组成的字符串:"^[A-Za-z]+$"。
只能输入由26个大写英文字母组成的字符串:"^[A-Z]+$"。
只能输入由26个小写英文字母组成的字符串:"^[a-z]+$"。
只能输入由数字和26个英文字母组成的字符串:"^[A-Za-z0-9]+$"。
只能输入由数字、26个英文字母或者下划线组成的字符串:"^\w+$"。
验证用户密码:"^[a-zA-Z]\w{5,17}$"正确格式为:以字母开头,长度在6~18之间,只能包含字符、数字和下划线。
验证是否含有^%&',;=?$\"等字符:"[^%&',;=?$\x22]+"。
只能输入汉字:"^[\u4e00-\u9fa5]{0,}$"
验证Email地址:"^\w+([-+.]\w+)*@\w+([-.]\w+)*\.\w+([-.]\w+)*$"。
验证InternetURL:"^http://([\w-]+\.)+[\w-]+(/[\w-./?%&=]*)?$"。
验证电话号码:"^(\(\d{3,4}-)|\d{3.4}-)?\d{7,8}$"正确格式为:"XXX-XXXXXXX"、"XXXX-XXXXXXXX"、"XXX-XXXXXXX"、"XXX-XXXXXXXX"、"XXXXXXX"和"XXXXXXXX"。
验证身份证号(15位或18位数字):"^\d{15}|\d{18}$"。
验证一年的12个月:"^(0?[1-9]|1[0-2])$"正确格式为:"01"~"09"和"1"~"12"。
验证一个月的31天:"^((0?[1-9])|((1|2)[0-9])|30|31)$"正确格式为;"01"~"09"和"1"~"31"。
匹配中文字符的正则表达式: [\u4e00-\u9fa5]
匹配双字节字符(包括汉字在内):[^\x00-\xff]
应用:计算字符串的长度(一个双字节字符长度计2,ASCII字符计1)
String.prototype.len=function(){return this.replace(/[^\x00-\xff]/g,"aa").length;}
匹配空行的正则表达式:\n[\s| ]*\r
匹配html标签的正则表达式:<(.*)>(.*)<\/(.*)>|<(.*)\/>
匹配首尾空格的正则表达式:(^\s*)|(\s*$)
---------------------------------------------------------------------------------------------------
介绍
Java中Spring.class涉及到正则表达式。如Spring.split(), matches(),replaceAll()等方法。
Java中更一般使用正则表达式的方式是利用Pattern.class和Matcher.class,所在package为java.util.regex
Java中正则表达式相关API使用不难掌握,不过重点在于编写合适的正则表达式,尤其是利用字符类和量词的使用。
正则表达式
Java中正则表达式与之前使用的Python是有区别的,区别在于Java对于反斜线(\)处理的不同。
在Python中"\d"表示 匹配一位数字(0-9),而Java中匹配一位数字(0-9),需要的正则表达式为"\\d"。
不过换行符和制表符只需要单反斜线“\n\t”。
正则表达式使用
1、匹配验证-验证Email是否正确
public static void main(String[] args) { // 要验证的字符串 String str = "service@xsoftlab.net"; // 邮箱验证规则 String regEx = "[a-zA-Z_]{1,}[0-9]{0,}@(([a-zA-z0-9]-*){1,}\\.){1,3}[a-zA-z\\-]{1,}"; // 编译正则表达式 Pattern pattern = Pattern.compile(regEx); // 忽略大小写的写法 // Pattern pat = Pattern.compile(regEx, Pattern.CASE_INSENSITIVE); Matcher matcher = pattern.matcher(str); // 字符串是否与正则表达式相匹配 boolean rs = matcher.matches(); System.out.println(rs); }
2、在字符串中查询字符或者字符串
public static void main(String[] args) { // 要验证的字符串 String str = "baike.xsoftlab.net"; // 正则表达式规则 String regEx = "baike.*"; // 编译正则表达式 Pattern pattern = Pattern.compile(regEx); // 忽略大小写的写法 // Pattern pat = Pattern.compile(regEx, Pattern.CASE_INSENSITIVE); Matcher matcher = pattern.matcher(str); // 查找字符串中是否有匹配正则表达式的字符/字符串 boolean rs = matcher.find(); System.out.println(rs); }
3、String
String.class提供了一些方法,如用于切分的split()方法,用于验证是否匹配的matches()方法,用于替换操作的replaceAll方法。简单示例如下:
/** * String中正则表达式的测试 * * @throws Exception 异常情况 */ @Test public void testStringRegex() throws Exception { // split // 结果:[some, examples, of, regex, test] String query = "some examples of regex test"; String[] parts = query.split(" "); System.out.println(Arrays.toString(parts)); // matches 整个字符串是否匹配 // 结果:false String regex = "regex"; boolean isMatched = query.matches(regex); System.out.println(isMatched); // replaceAll // 结果:some <REGEX> examples <REGEX> of <REGEX> regex <REGEX> test String replaceQuery = " <REGEX> "; String newQuery = query.replaceAll(" ", replaceQuery); System.out.println(newQuery); }
4、Pattern和Matcher
正则表达式更一般的用法是使用*java.util.regex.*下的Matcher和Pattern类。
通过Pattern类的静态方法static Pattern.compile() 编译正则表达式,利用Pattern的*matcher()*方法生产Matcher对象。根据Matcher对象提供的API完成相应的操作。
我们以获取字符串中的电话号码和Html中的标题为例,实现正则表达式的匹配。示例如下:
import java.util.ArrayList; import java.util.List; import java.util.regex.Matcher; import java.util.regex.Pattern; /** * Description: 正则表达式 * <p> * */ public class RegexUtils { /** * 获取content中全部的手机号码 * * @param content 待匹配内容 * @return 电话号码集合 */ public List<String> getPhoneNumber(String content) { List<String> phoneNumbers = new ArrayList<>(); Matcher matcher = PHONE_PATTERN.matcher(content); while (matcher.find()) { // group=2对应(1\\d{10}), 匹配的值即为手机号码 phoneNumbers.add(matcher.group(2)); } return phoneNumbers; } /** * 从Html中获取title * * @param content a html * @return the title of a html */ public String getHtmlTitle(String content) { Matcher matcher = TITLE_PATTERN.matcher(content); return matcher.find()? matcher.group(1):null; } /** 手机号码 */ private static final String PHONE_REGEX = "(^|\\D)(1\\d{10})($|\\D)"; private static final Pattern PHONE_PATTERN; /** html 标题 */ private static final String HTML_TITLE_REGEX = "<title>(.*?)</title>"; private static final Pattern TITLE_PATTERN; static { PHONE_PATTERN = Pattern.compile(PHONE_REGEX); // 不区分大小写 TITLE_PATTERN = Pattern.compile(HTML_TITLE_REGEX, Pattern.CASE_INSENSITIVE); } }