regex - 在 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 值,而不是返回 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";
}
}
推荐阅读
- tensorflow - How can i download tensorflow tf_files
- laravel - laravel unique name says already taken if you edit/update that particular object
- python - 如何在 Django 中创建具有相同模型的多对多关系并保存到数据库?
- javascript - Angular 上的 ForkJoin() 问题
- sql - How to properly update big tables without making big transient journal?
- solr - Cannot index decimal values from CSV
- spring-mvc - 将图像存储在 Spring mvc 真实路径中是个好主意吗
- python - 通过python将变量的值插入数据库
- java - 如何使用 Java 8 流从列表列表中获取最大列表的大小?
- java - 如何删除数组列表Java中的重复元素