use*_*949 9 regex dart flutter
我正在尝试在正则表达式语言 DART 中传递变量
`betweenLenth(val, field, [min = 4, max = 20]) {
final RegExp nameExp = new RegExp(r'^\w{" + min + "," + max + "}$');
if (!nameExp.hasMatch(val))
return field + " must be between $min - $max characters ";
}`
Run Code Online (Sandbox Code Playgroud)
谢谢
您不能对原始字符串使用字符串插值。
带插值
final RegExp nameExp = new RegExp('^\\w{"$min","$max"}\$');
final RegExp nameExp = new RegExp('^\\w{$min,$max}\$');
Run Code Online (Sandbox Code Playgroud)
有串联
final RegExp nameExp = new RegExp(r'^\w{"' + min + '","' + max + r'"}$');
final RegExp nameExp = new RegExp(r'^\w{' + min + ',' + max + r'}$');
Run Code Online (Sandbox Code Playgroud)
用于转义要作为文字模式部分放入正则表达式中的任何文字字符串的通用函数可能如下所示
escape(String s) {
return s.replaceAllMapped(RegExp(r'[.*+?^${}()|[\]\\]'), (x) {return "\\${x[0]}";});
}
Run Code Online (Sandbox Code Playgroud)
这是必要的,因为未转义的特殊正则表达式元字符要么会导致正则表达式编译错误(如不匹配(
或)
),要么可能使模式匹配意外的内容。有关正则表达式转义字符串的更多详细信息,请参阅MDN。
因此,如果有myfile.png
,则 will 的输出escape('myfile.png')
将是myfile\.png
,并且.
will 现在仅匹配文字点字符。
在当前场景中,您不必使用此函数,因为最大和最小阈值用数字表示,并且数字不是特殊的正则表达式元字符。
你可以只使用
betweenLenth(val, field, [min = 4, max = 20]) {
final RegExp nameExp = new RegExp("^\\w{$min,$max}\$");
if (!nameExp.hasMatch(val))
return field + " must be between $min - $max characters ";
return "Correct!";
}
Run Code Online (Sandbox Code Playgroud)
生成的正则表达式是^\w{4,20}$
.
笔记:
$
字符"\\d"
以匹配数字等) 归档时间: |
|
查看次数: |
3866 次 |
最近记录: |