2015-12-02 53 views
0

我已經在isIn.args中寫了兩個正則表達式,我想phone驗證器可以檢查我的輸入值是其中的一個,但是失敗了。如何在sequelize.js字段中編寫正則表達式validation.isIn.args

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

+0

你不介意澄清是什麼你正在尋找的模式? –

+0

此模式用於驗證它是電話號碼還是手機號碼。 – huguangju

回答

1

sequelize「isIn」驗證器不提供正則表達式支持,它檢查天氣值是否直接存在於args列表中,而不是「is」驗證器支持正則表達式,但我認爲它不會支持多於一次在一個正則表達式,你需要或者轉換2章前爲1或創建自定義的驗證,如果他們中的一個是通過它檢查兩個正則表達式和返回true,類似下面

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!') 
       } 
      } 
     } 
    } 
}) 
+0

非常感謝:) – huguangju

相關問題