为什么此正则表达式单元测试失败?

时间:2019-08-29 02:08:37

标签: regex flutter dart

我正在使用Dart / Flutter编写应用程序。

我已经编写了此正则表达式函数来检查某些字符串:

tolower

我正在尝试使用以下功能对其进行单元测试:

  static final String nameOnCardRegex = r'^[\-A-Z `’\.\' '`]';
  static final int nameOnCardMaxLength = 21;

  static bool checkNameOnCard(String nameOnCardInput) {
    if (nameOnCardInput == null ||
        nameOnCardInput.length > nameOnCardMaxLength) {
      return false;
    }
    return RegExp(nameOnCardRegex).hasMatch(nameOnCardInput);
  }

我希望此函数返回false(因为我要传递 test("[Name On Card String Validator] Check invalid Name On Card input 2", () async { expect(YouStrings.checkNameOnCard("TEST @NAME"), false); }); 字符)。 但是,它返回true。

测试结果:

@

1 个答案:

答案 0 :(得分:2)

看看regex101:https://regex101.com/r/AmJ0Rv/1

您的正则表达式与T中的TEST @NAME相匹配,因此,如果预期的答案不是true

尝试使用此:

^[-A-Z `’.\' '`]+

并检查结果是否与原始字符串相同。

或者,您可以使用此正则表达式:

[^-A-Z `’.\' '`]

如果存在匹配项,则应返回false,如果不存在,则应返回true。此正则表达式的作用是检查是否存在不允许的任何字符。