如何在 sequelize.js 字段 validation.isIn.args 中编写正则表达式

How to write regex in a sequelize.js field validation.isIn.args

我在 isIn.args 中写了两个正则表达式,我希望 phone 验证器可以检查我的输入值是其中之一,但失败了。

var ValidateMe = sequelize.define('Foo', {
    phone: {
        type: Sequelize.STRING(20),
        validate: {
            isIn: {
                args: [[
                    // moible number of china
                    /^(13|14|15|17|18)\d{9}$/i,
                    // telphone number of china
                    /^((\(\d{2,3}\))|(\d{3}\-)|(\d{3}))?(\(0\d{2,3}\)|0\d{2,3}-)?[1-9]\d{6,7}(\-\d{1,4})?$/i
                ]],
                msg: "moible or telphone number format error!"
            }  
        }
    }
})

我想要得到结果:

var inputNumber = '15208282123'; // or '8008123'
( /^(13|14|15|17|18)\d{9}$/i.test(inputNumber) 
  || /^((\(\d{2,3}\))|(\d{3}\-)|(\d{3}))?(\(0\d{2,3}\)|0\d{2,3}-)?[1-9]\d{6,7}(\-\d{1,4})?$/i.test(inputNumber)
) === true;

运行 它在浏览器控制台中,结果是 true.

sequelize "isIn" 验证器不提供正则表达式支持,它检查天气值是否直接出现在参数列表中,相反 "is" 验证器支持正则表达式,但我不认为它将一次支持多个正则表达式,您需要将 2 个正则表达式转换为 1 个或创建自定义验证器来检查正则表达式和 return 如果其中一个通过则为真,如下所示

var ValidateMe = sequelize.define('Foo', {
    phone: {
        type: Sequelize.STRING(20),
        validate: {
            validatePhone: function(value) {
               if(!/^(13|14|15|17|18)\d{9}$/i.test(value) && !/^((\(\d{2,3}\))|(\d{3}\-)|(\d{3}))?(\(0\d{2,3}\)|0\d{2,3}-)?[1-9]\d{6,7}(\-\d{1,4})?$/i.test(value)) {
                  throw new Error('phone format error!')
               }
            }
        }
    }
})