还是正则表达式(已解决)

问题根源在于我太大意了,不过我写的端口校验确实有问题,不严谨。最后却使用了数字范围校验,很简单。感谢各位评论提供的好点子,在此谢谢各位啦

在在线测试工具上验证表达式是对的,在项目中就是错的,例如测试端口号

let checkPort = (rule, value, callback) => {
        if (value.length < = 0) {
          return callback(new Error('输入不可以为空'));
        }
        setTimeout(() => {
          if (value == '' || typeof(value) == undefined) {
            callback(new Error('请输入端口值'));
          } else {
            const re = /^[1-9][0-9]{0,3}|[1-5][0-9]{4}|6[0-4][0-9]{3}|65[0-4][0-9]{2}|655[0-2][0-9]{1}|6553[0-5]$/;
            const rsCheck = re.test(value);
            if (!rsCheck) {
              callback(new Error('请输入在[0-65535]之间的端口值'));
            } else {
              callback();
            }
          }
        }, 1000);

(根据下面提出意见的大神,将!value改成value.length,会出现一直校验的loading状态)会显示成以下,感觉十分有毒

clipboard.png

另还有一处

 let checkPackage = (rule, value, callback) => {

        if (!value) {
          return callback(new Error('协议包名不能为空'));
        }
        const reg = /^([a-z]+\.?)+[a-z0-9]+$/;
        setTimeout(() => {
          if (!reg.test(value)) {
            callback(new Error('请输入正确的协议包名称,如 a.aa2'));
          } else {
            callback();
          }
        }, 1000);
      };

已经直接忽略我的value值了。。。

clipboard.png

有没有大神指点迷津

阅读 2.1k
3 个回答

本来端口号就是整数值,就转换成整数值来判断最简单,用正则式其实不方便的。
而且你其实检测要求输入的端口号并不是0-65535 范围内的。
第二个还是用value.length 来判断更好,你想如果输入一个空格呢?

第一个 你的正则是这样的

clipboard.png

第二个你的判断 !value.length 更好吧

clipboard.png

第一个的正则就不对,没法判断端口号,像22221342sd3这种输入也会判断成功
但是界面上显示的错误信息跟正则的匹配没有关系,肯定别的地方错了

撰写回答
你尚未登录,登录后可以
  • 和开发者交流问题的细节
  • 关注并接收问题和回答的更新提醒
  • 参与内容的编辑和改进,让解决方法与时俱进
推荐问题