我正在try 在正则表达式中传递变量 语言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 ";
   }`

谢谢

推荐答案

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"匹配数字等)

Dart相关问答推荐

Dartpad使用基本身份验证发出请求

Dart 列表中的 addAll() 和 followBy() 有什么区别?

Dart - 检测未完成的期货

跳过 JavaScript 直接进入 Dart

如何正确启用/禁用 Flutter 的 Button

摆动中的可滚动导轨

如何在 Dart 语言中将 Future 转换为 List

我如何在屏幕上弹出特定的Flutter

如何在 Flutter CustomPainter 中使用Bezier Curves绘制形状

将DateTime转换为ISO 8601

如何从列表中的元素创建逗号分隔的字符串

是什么使它成为 Dart 中的固定长度列表?

Dart:将map转换为查询字符串

如何在dart中生成随机字符串?

如何在 Dart 中进行整数除法?

Dart 中的错误与异常

从函数返回多个值

dart 折叠(Fold)与减少(Reduce)

Dart:创建一个从 0 到 N 的列表

如何在 Dart 中生成随机数?