根据 Flutter 中的 RegExp 模式评估字符串



我正在尝试根据 Flutter 中的 RegExp 参数列表评估字符串。例如,字符串必须至少包含:

  • 一个大写字母
  • 一个小写字母
  • 0-9 中的一个数字
  • 一个特殊字符,例如 $ 或 !

这基本上是针对应用程序的密码输入字段。我已经设置好了,首先使用如下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"语句,尽管我不知道这将如何工作。谢谢!

没错,您可以使用 RegExr 检查您的 RegExp,分离每个部分并单独使用它们来出现自定义错误。此外,您可以返回一个 String 值,而不是返回布尔值,例如以下函数:

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";
}
}

最新更新