escape any literal string that you want to put inside a regex as a literal pattern part的泛型函数可能如下所示
escape(String s) {
return s.replaceAllMapped(RegExp(r'[.*+?^${}()|[\]\\]'), (x) {return "\\${x[0]}";});
}
这是必要的,因为未转义的特殊正则表达式元字符要么会导致正则表达式编译错误(如不匹配的(
或)
),要么可能会使模式匹配某些意外情况.有关escaping strings for regex的更多详细信息,请访问MDN.
因此,如果您有myfile.png
,则escape('myfile.png')
的输出将是myfile\.png
,而.
现在将只与文字点字符匹配.
在当前场景中,您不必使用此函数,因为最大阈值和最小阈值是用数字表示的,并且数字不是特殊的正则表达式元字符.
你可以直接用
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!";
}
由此得到的正则表达式是^\w{4,20}$
.
注:
- 使用非原始字符串文字以使用字符串插值
- 转义常规字符串文字中的字符串锚的末尾,以定义文字
$
个字符
- 使用双反斜杠定义正则表达式转义序列(
"\\d"
匹配数字等)