首页 > 解决方案 > 在 Flutter 中使用 RegExp 根据模式评估字符串

问题描述

我正在尝试使用 Flutter 中的 RegExp 针对一组参数列表评估字符串。例如,字符串必须至少包含:

这基本上用于应用程序的密码输入字段。我已经设置好了,首先使用validateStructure如下:

abstract class PasswordValidator {
  bool validateStructure(String value);
}

然后,我使用了RegExp如下功能:

class PasswordValidatorSpecial implements PasswordValidator {
  bool validateStructure(String value) {
    String pattern =
        r'^(?=.*?[A-Z])(?=.*?[a-z])(?=.*?[0-9])(?=.*?[!@#\$&*~£]).{8,}$';
    RegExp regEx = new RegExp(pattern);
    return regEx.hasMatch(value);
  }
}

这确实很有效,从某种意义上说,当我通过它传递一个字符串/密码时,它会告诉我是否至少有一个条件不满足。但是,我想做的是让输出更具体,告诉我哪些标准不符合。

例如,如果密码除了数字(0-9)之外的所有内容,我希望能够让输出明确说明缺少数字,但其他所有内容都存在。

我将如何调整我的代码才能做到这一点?我想也许可以通过使用条件“if”语句,尽管我不知道它是如何工作的。谢谢!

标签: regexvalidationflutter

解决方案


没错,你可以使用RegExr来检查你的 RegExp,将每个部分分开,分别使用它们来产生自定义错误。此外,您可以返回 String 值,而不是返回 bool 值,例如以下函数:

String validateStructure(String value) {
    String patternUpperCaseCharacters = r'^(?=.*?[A-Z])';
    String patternLowerCaseCharacters = r'^(?=.*?[a-z])';
    String patternNumbers = r'^(?=.*?[0-9])';
    String patternSpecialCharacters = r'^(?=.*?[!@#\$&*~£])';

    RegExp regEx = new RegExp(patternUpperCaseCharacters);
    if (regEx.hasMatch(value)) {
      regEx = new RegExp(patternLowerCaseCharacters);
      if (regEx.hasMatch(value)) {
        return "More errors";
      } else {
        return "You need at least one lowercase letter";
      }
    } else {
      return "You need at least one capital letter";
    }
  }

推荐阅读