vue3 elmentuiPlus校验el-input框值输入

el-input框里面的值只能是
{“id”:“dhjfk138467”}
这种带不固定的key和值的json数据怎么写

img

img

<template>
  <el-form :model="form" :rules="rules">
    <el-form-item label="用户名" prop="name">
      <el-input v-model="form.name"></el-input>
    </el-form-item>
    <el-form-item>
      <el-button type="primary" @click="submitForm('form')">提交</el-button>
    </el-form-item>
  </el-form>
</template>

<script>
export default {
  data() {
    return {
      form: {
        name: ''
      },
      rules: {
        name: [
          { required: true, message: '请输入用户名', trigger: 'blur' },
          { min: 3, max: 5, message: '长度在 3 到 5 个字符', trigger: 'blur' },
          { validator: this.validateName, trigger: 'blur' }
        ]
      }
    }
  },
  methods: {
    validateName(rule, value, callback) {
      if (value === 'admin') {
        callback(new Error('用户名不能为admin'))
      } else {
        callback()
      }
    },
    submitForm(formName) {
      this.$refs[formName].validate((valid) => {
        if (valid) {
          alert('验证成功')
        } else {
          alert('验证失败')
          return false
        }
      })
    }
  }
}
</script>


大概是这样使用的

以下答案由GPT-3.5大模型与博主波罗歌共同编写:
你可以使用自定义的校验器函数来检查输入的值是否为符合要求的带不固定的key和值的json数据。

首先,在el-input中定义自定义的校验器函数,如下所示:

<el-input
  v-model="jsonStr"
  :validate-event="false"
  :validator="validateJson"
  placeholder="请输入json字符串"
></el-input>

在这里,我们将 validate-event 设置为 false 避免输入时会触发实时校验。然后将 validator 属性设置为一个函数 validateJson。

接下来,编写 validateJson 函数进行校验,实现代码如下:

methods: {
  validateJson(rule, value, callback) {
    try {
      const obj = JSON.parse(value);
      if (Object.keys(obj).length !== 1) {
        callback("请输入符合要求的JSON数据!");
        return;
      }
      let key = Object.keys(obj)[0];
      if (key !== 'id' || !/^[a-zA-Z0-9]+$/.test(obj[key])) {
        callback("请输入符合要求的JSON数据!");
        return;
      }
      callback();
    } catch (err) {
      callback("请输入符合要求的JSON数据!");
      return;
    }
  }
}

在这里,我们首先将输入的字符串解析为 JSON 对象。然后检查对象中是否只有一个 key,如果是,我们将这个 key 赋值给变量 key,接着检查该 key 是否为 'id',如果是,我们检查它的值是否符合规范,最后通过 callback 函数来告诉 el-form 表单验证结果是否正常。

完整示例代码如下:

<template>
  <div>
    <el-form :model="form" ref="form" :rules="rules">
      <el-form-item label="JSON数据">
        <el-input
          v-model="jsonStr"
          :validate-event="false"
          :validator="validateJson"
          placeholder="请输入json字符串"
        ></el-input>
      </el-form-item>
      <el-form-item>
        <el-button type="primary" @click="submitForm">立即创建</el-button>
        <el-button @click="resetForm">重置</el-button>
      </el-form-item>
    </el-form>
  </div>
</template>

<script>
export default {
  data() {
    return {
      form: {
        json: ""
      },
      jsonStr: ""
    };
  },
  methods: {
    validateJson(rule, value, callback) {
      try {
        const obj = JSON.parse(value);
        if (Object.keys(obj).length !== 1) {
          callback("请输入符合要求的JSON数据!");
          return;
        }
        let key = Object.keys(obj)[0];
        if (key !== 'id' || !/^[a-zA-Z0-9]+$/.test(obj[key])) {
          callback("请输入符合要求的JSON数据!");
          return;
        }
        callback();
      } catch (err) {
        callback("请输入符合要求的JSON数据!");
        return;
      }
    },
    submitForm() {
      this.$refs.form.validate(valid => {
        if (valid) {
          this.$message({
            message: "验证通过",
            type: "success"
          });
        } else {
          this.$message({
            message: "验证失败",
            type: "error"
          });
          return false;
        }
      });
    },
    resetForm() {
      this.$refs.form.resetFields();
    }
  },
  rules: {
    json: [
      { required: true, message: "请输入JSON数据", trigger: "blur" }
    ]
  }
};
</script>

在上述示例代码中,我们还添加了一个 el-form 表单,并设置了校验规则。当您点击立即创建按钮时,将执行 submitForm 函数进行表单验证。如果表单验证通过,将弹出验证通过的消息提醒,否则将弹出验证失败的消息提醒。
如果我的回答解决了您的问题,请采纳!

没太懂你的意思,直接判断它等不等于{“id”:“dhjfk138467”}不就可以了吗

//使用正则判断一个字符串是否为JSON字符串
var isJSON = function (str){
        if (/^[\],:{}\s]*$/.test(str.replace(/\\["\\\/bfnrtu]/g, '@').
            replace(/"[^"\\\n\r]*"|true|false|null|-?\d (?:\.\d*)?(?:[eE][ \-]?\d )?/g, ']').
            replace(/(?:^|:|,)(?:\s*\[) /g, ''))) {
            return true;
        }else{
            return false;
        } 
}
该回答引用ChatGPT
要对el-input框的值进行校验,使其满足特定的格式,可以使用elementui的表单校验规则。首先,在template中使用el-form和el-form-item包裹el-input,然后在el-form-item中设置prop属性为一个自定义的值,接着在data中声明rules对象,对该prop属性进行校验规则的设置。具体实现代码如下:










<script>
export default {
data() {
return {
form: {
json: ''
},
rules: {
json: [
{
validator: (rule, value, callback) => {
try {
const obj = JSON.parse(value)
if (!obj.id) {
callback(new Error('输入不符合格式'))
} else {
callback()
}
} catch (e) {
callback(new Error('输入不符合格式'))
}
},
trigger: 'blur'
}
]
}
}
}
}
</script>


在上述代码中,我们首先引入element-ui组件库,然后定义模板的el-form和el-form-item。其中,在el-form-item中,我们设置prop为“json”,表示校验的是form中的json属性值。随后在data中,我们声明了form和rules对象。其中,form对象维护了只有一个属性json,保存了用户在输入框中的输入。rules对象中,我们设置了一个json的校验规则,这个规则选项是一个数组,其中的对象包含validator和trigger两个属性。其中validator是一个函数,它被用来校验用户输入是否符合要求,如果符合要求,调用callback()函数返回一个成功的状态;否则调用callback()函数并传入一个错误的数据对象,来表示校验失败。trigger设置了一个校验触发器,在本例中,我们选择了blur,表示在失去焦点时进行校验。

至此,我们已经实现了对el-input框中的输入值的校验需求。