- //我使用了antd ui库
- <a-form-model-item
- ref="address_group"
- label="规则描述"
- prop="address_group"
- >
- <a-textarea
- :rows="6"
- style="width: 60%"
- placeholder="一次最多输入6行,多个换行输入"
- v-model="form.address_group"
- />
- <span style="float: right; color: #999">{{ this.row }}/6span>
- a-form-model-item>
- export default {
- data() {
- return {
- row: 0,
- form: {
- address_group: undefined, //账户列表
- },
- rules: {
- address_group: [
- { required: true, message: "请输入!", trigger: "blur" },
- ],
- },
- };
- },
- watch: {
- "form.address_group"(newValue, oldValue) {
- console.log(newValue, oldValue);
- if (this.getAddRow() > 6) {
- this.form.address_group = oldValue;
- this.$message.info("一次最多输入6行");
- }
- },
- },
- methods: {
- // 限制最多输入6行
- getAddRow() {
- let row = 0;
- this.form.address_group.split("\n").forEach((item) => {
- if (item.length === 0) {
- row += 1;
- } else {
- row += Math.ceil(item.replace(/[\u0391-\uFFE5]/g, "aa").length / 20);
- }
- this.row = row;
- });
- return row;
- },
- },
- };
row += Math.ceil(item.replace(/[\u0391-\uFFE5]/g,"aa").length / 20) 解读
- 正则表达式这里的意思是,如果是汉字就转换成aa,因为一个汉字所占的长度等于两个字母。
- 这里的20指的是单行字符的最大个数,可以根据你的textarea的实际情况来调整。然后进行向上取整。
- 为什么要向上取整呢?比如这里单行的最大字符数是20,如果输入20个字符以内,除以20获得的是个小于1的小数,但是这个小于20的字符显然是一行,所以向上取整为1。同理,如果是21,显然超过了单行最大字符数,占了两行,除以20得到1.05,向上取整就是2,正好两行。