使用正则表达式时出现“ SyntaxError:无效的速记属性初始化程序”

时间:2019-12-20 23:12:09

标签: javascript regex algorithm visual-web-developer

我正在尝试使用以下功能来验证引脚

function validate(num){
  num.length === 4 || num.length === 6 ? {
    regex = /\d+/,
    regex:test(num)
  } 
  :
  false
}

但是我遇到此错误,但我不知道为什么

    /home/runner/index.js:3
    regex = /\d+/,
    ^^^^^^^^^^^^^

SyntaxError: Invalid shorthand property initializer

3 个答案:

答案 0 :(得分:3)

正如其他人指出的那样,您不能将语句放在条件表达式(或任何其他表达式)中,而只能放在表达式中。

您收到的错误是因为它认为您正在尝试编写对象文字,但是您不能在对象文字中进行赋值。

您可以使用普通的if语句:

if (num.length == 4 || num.length == 6) {
    var regex = /\d+/;
    return regex.test(num);
} else {
    return false;
}

但是根本不需要条件,您可以在regexp本身中测试长度。

function validate(num) {
    return /^\d{4}$|^\d{6}$/.test(num);
}

答案 1 :(得分:2)

尽管我在这里不推荐这样做,但请务必牢记可以在表达式上下文中使用function expression。此操作一直在进行,例如用于回调,并且相同的概念可以转移到其他地方。

这里是原始函数的最小转换(它保留了许多原始的bug和其他功能,除非它们引起解析错误)显示了一个函数表达式。这种特定情况也称为"IIFE"

function validate(num){
  return num.length === 4 || num.length === 6
   ? (function() {
       let regex = /\d+/; 
       return regex.test(num);
     })()
   : false;
} 

答案 2 :(得分:1)

您不能将?:运算符与语句一起使用;只是表达式。

但是,这里不需要为正则表达式定义变量。您可以直接在正则表达式文字上调用.test

function validate(num){
  return num.length === 4 || num.length === 6 ? /\d+/.test(num) : false
}

更好的是,只需使用&&运算符,此运算符在逻辑上是等效的:

function validate(num){
  return (num.length === 4 || num.length === 6) && /\d+/.test(num);
}