RegExp开关盒内部的防抖内部不起作用

时间:2019-04-10 19:48:19

标签: javascript vue.js

我正在使用一个VueJS应用程序,该应用程序需要一个搜索输入,然后我将根据该术语查询不同的API。我的第一个正则表达式只应该匹配不超过7位数字的数字。但是,它可以匹配任何东西。

我假设去抖动,并且switch / case语句引起一些混乱-但我不确定。

最后,我将需要进行6或7个不同的正则表达式测试,以便进行检查。

有人知道我在做什么错吗?

示例JS:

Vue.component("v-select", VueSelect.VueSelect);

new Vue({
  el: "#app",
  data: {
    options: []
  },
  methods: {
    onSearch(search, loading) {
      loading(true);
      this.search(loading, search, this);
    },
    search: _.debounce((loading, search, vm) => {
      console.log('search term is '+ search);
      var regex1 = /([0-9]){0,7}/;

      switch(true){
        case regex1.test(search):
          console.log('we have a number '+ search);
          break;
        default:
          console.log('default case '+ search);
          fetch(`https://api.github.com/search/repositories?q=${escape(search)}`).then(res => {
            res.json().then(json => (vm.options = json.items));
            loading(false);
          });
          break;
        };
    }, 350)
  }
});

Codepen示例:

https://codepen.io/thindery/pen/xeqBGx?editors=1010

控制台显示输出。尝试搜索常规词,例如“ vue”或“ library”。这些由于某种原因触发了数字正则表达式。

1 个答案:

答案 0 :(得分:3)

实际上,/([0-9]){0,7}/将允许任何字符串通过,因为它允许零位数字,而对其余字符串没有任何限制。

因此,将^$锚添加到您的正则表达式。您不需要括号,\d[0-9]

/^\d{0,7}$/