Dart语法校验问题:如何实现3-20字符长度的合法校验?
Dart实现3-20字符长度校验及语法逻辑解析
原代码的问题分析
你贴的第一段校验代码逻辑完全错误:
validator: (value) { return value != null && value.length < 3 && value.length > 20 ? "Title between 3 ~ 20 characters" : null; }
这里用&&同时判断长度<3和长度>20,但一个字符串的长度不可能同时满足这两个条件,所以这个判断永远为false,自然不会返回错误提示。
第三段代码只判断了长度<3的情况,所以只有输入字符数不足3时才会报错,超过20字符时不会触发校验提示。
正确的3-20字符校验实现
要实现“长度必须在3到20字符之间”的校验,需要判断字符串长度小于3 或者 大于20的情况(只要满足其中一个就不符合规则),代码如下:
validator: (value) { // 先判断value不为空,再检查长度是否超出范围 if (value != null && (value.length < 3 || value.length > 20)) { return "标题长度需在3~20字符之间"; } // 校验通过返回null return null; }
或者用三元表达式简化写法:
validator: (value) { return value != null && (value.length < 3 || value.length > 20) ? "标题长度需在3~20字符之间" : null; }
语法逻辑解析
Dart中表单校验的validator回调逻辑很直接:
- 接收输入值
value,校验不通过时返回错误提示字符串,校验通过则返回null。 - 我们的规则是“长度必须在3-20之间”,反向推导就是不满足
3≤长度≤20的情况都要报错,也就是长度<3或者长度>20,这两个条件用||(逻辑或)连接,只要其中一个成立,就返回错误信息。
第二段代码的问题修正
你贴的第二段代码存在类型逻辑错误:
validator: (value) { return value != null && value.length > 10 && value is int ? "Number to big" : null; },
如果value是int类型,它并没有length属性,运行时会直接报错。正确的逻辑应该先判断类型,再判断数值大小,而且表单输入的value通常是String类型,需要先转换为int再判断:
validator: (value) { if (value != null) { // 尝试将字符串转为int final numValue = int.tryParse(value); if (numValue != null && numValue > 10) { return "数字过大"; } } return null; }
内容的提问来源于stack exchange,提问作者muismat333
相关产品推荐
相关产品推荐

