【问题标题】:How to format input value to DD/MM/YYYY using Javascript如何使用 Javascript 将输入值格式化为 DD/MM/YYYY
【发布时间】:2019-06-20 15:06:15
【问题描述】:

我有一个输入,用户可以在其中输入日期,在输入时我想将其值格式化为DD/MM/YYYY。因此,当输入值与所需格式匹配时,我想限制用户输入。

<template>
  <input v-model="dob" @input="handleInput">
</template>

<script>
export default {
  data() {
    return {
      dob: ""
    };
  },
  methods: {
    handleInput(e) {
      let value = e.target.value;
      this.dob = this.$options.filters.formatTo(value, "date");
    }
  }
};
</script>

这是我试过的过滤器,

Vue.filter('formatTo', function(value, format) {
  const formats = {
    date: {
      blocks: [2, 2, 4],
      delimeter: '/'
    }
  };

  if (!value || !(format in formats)) return;

  const { blocks, delimeter } = formats[format];
  const numberOfBlocks = blocks.length - 1;
  const maxLength = numberOfBlocks + blocks.reduce((a, b) => a + b, 0);
  let index = -1;

  value = value.toString().split('');

  blocks.map(block => {
    index += block + 1; // here +1 is for delimeter
    value.splice(index, 0, delimeter);
  });

  // remove excess values
  value.length = value.length > maxLength ? maxLength : value.length;

  return value.join('').trim();
});

【问题讨论】:

  • 你尝试了什么...?
  • @sajahan 更新
  • 结帐moment.js
  • @Ace 我想在输入时格式化它,在输入日后自动添加/,在输入月后添加第二个/
  • 在用户打字时修改用户输入会导致糟糕的用户体验,并且需要您编写大量代码以实现零有用的功能。只需让用户输入日期,不要用你认为很酷的东西来纠缠他们,他们可能会觉得很烦。

标签: javascript validation date input vuejs2


【解决方案1】:

这里我根据字符串的长度创建一个掩码。当长度达到 2 时,应用第一个 /,当长度达到 4 时,应用第二个 /。然后您需要将输入限制为 8 个字符。

const createMask = string => {
  const length = string.length;
  const regex = /(\d{0,2})(\d{0,2})(\d{0,4})/;
	  if(length < 2){
	    return string;
	  }
	  if(length <= 3){
	    return string.replace(regex, "$1\/$2");
	  }
    return string.replace(regex,"$1\/$2\/$3");
}

console.log(createMask('12241990'))

【讨论】:

  • 谢谢,我也尝试了这个解决方案,但是当在第一个斜杠或第二个斜杠后按退格键时,它没有按预期工作。例如:12/12/05/ 之后
  • 对。可能必须采取某种技巧来隐藏真实输入并显示蒙面输入。或者也许只是尝试masking library
  • 如果用户输入“2/7/2019”会发生什么?大多数用户在打字时会看着键盘,尤其是在移动设备上,当他们回头看输入时,他们可能会对他们所面临的情况感到惊讶。 ;-)
  • 当然,但这不一定是人们输入的内容。用户界面应该是有用和友好的,而不是规定性的和烦人的。
  • @Naresh 你有什么反对原生日期输入的吗?
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2018-09-01
  • 1970-01-01
  • 2013-11-01
  • 2015-11-03
  • 2021-08-01
  • 2017-04-16
  • 1970-01-01
相关资源
最近更新 更多