正则字符类(只匹配一个字符)
[abc] 只能是a,b,或c
[^abc] 除了a,b,c之外的任何字符
[a-zA-Z] a到zA到Z,包括(范围)
[a-d[m-p]] a到d,或m到p
[a-z&&[def]] d,e,或f(交集)
[a-z&&[^bc]] a到z,除了b和c(等同于[ad-z])
[a-z&&[^m-p]] a到z,除了m到p(等同于[a-lq-z])
正则预定义字符(只匹配一个字符)
. 任何字符
\b 一个数字:[0-9]
\D 非数字:[^0-9]
\s 一个空白字符:[\t\n\x0B\f\r] --小写
\S 非空白字符:[^\s] --大写
\w [a-zA-Z_0-9]英文、数字、下划线 --小写
\W [^\w]一个非单词字符 --大写
正则数量词
X? X,一次或0次
X* X,零次或多次
X+ X,一次或多次
X{n} X,正好n次
X {n, } X,至少n次
X {n,m} X,至少n但不超过m次
注: 在正则表达式中 \\中前面的\只是一个转义字符,改变后面的\原本的含义,把后面的\变为一个普通的\
例: 以字符串的形式打印一个双引号
print(" \'' ");
输出结果为 '';
正则符号
| 符号 | 含义 | 举例 |
|---|---|---|
| [] | 里面的内容出现一次 | [0-9] [a-zA-Z0-9] |
| () | 分组 | a(bc)+ |
| ٨ | 取反 | [^abc] |
| && | 交集,不能写单个的& | [a-z&&m-p] |
| | | 写在方括号外面表示并集 | [a-zA-Z0-9] x|X |
| . | 任意字符 | 回车符号不匹配 |
| \ | 转义字符 | \d |
| \d | 0-9 | \d+ |
| \D | 非0-9 | \D+ |
| \s(小写) | 空白字符 | [\t\n\x0B\f\r] |
| \S | 非空白字符 | [^\s] |
| \w(小写) | 单词字符 | [a-zA-Z_0-9] |
| \W | 非单词字符 | [^\w] |
| ? | 0次或1次 | \d? |
| * | 0次或多次 | \d* (abc)* |
| + | 1次或多次 | a(bc)+ |
| {} | 具体次数 | a{7} \d{7,19} |
| (?i) | 忽略后面字符的大小写 | (?i)abc |
| a((?i)b)c | 只忽略b的大小写 | a((?i)b)c |
正则示例
Dart 正则表达式验证手机号码
输入String类型的电话号码,例:String phoneNumber = '13888888888';
验证
RegExp exp = RegExp( r'^((13[0-9])|(14[0-9])|(15[0-9])|(16[0-9])|(17[0-9])|(18[0-9])|(19[0-9]))\d{8}$');
bool matched = exp.hasMatch(mobileTextController.text);
返回true即为正确号码
隐藏部分号码转星号使用
String phoneNumberStr = phoneNumber.replaceFirst(new RegExp(r'\d{4}'), '****', 3);
验证手机号码邮箱
bool emailVerification({String email}) {
if (email == null || email.isEmpty) return false;
String regexEmail = "^\w+([-+.]\w+)*@\w+([-.]\w+)*\.\w+([-.]\w+)*$";
bool _regExp = RegExp(regexEmail).hasMatch(email);
return _regExp;
}
正则去掉小数点后的0
String a = 12.20;
String b = 12.0;
a = a.replaceAll(RegExp(r"([.]*0)(?!.*\d)"), "");// 12.2
b = b.replaceAll(RegExp(r"([.]*0)(?!.*\d)"), "");//12
限制表情输入
inputFormatters: [
FilteringTextInputFormatter.allow(RegExp("[a-zA-Z]|[\u4e00-\u9fa5]|[0-9]|[ ]")),//限制表情的输入
LengthLimitingTextInputFormatter(15),//限制输入框输入的字符长度
],