2017-03-08 29 views
1

私はmongodbを使ってデータを格納しています。私は、文字列として、完全な正規表現を保存したいと思います:正規表現の文字列

{ 
    permissions: [{ 
    resName: '/user[1-5]/ig', 
    isRegex: true 
    }] 
} 

私は正規表現を格納することができ、モジュールmongoose-regexpがある知っているが、私は同じフィールドに正規表現と文字列を格納したいと思います。

eval(user.permissions[i].resName).test(resName)を使用して達成しました。私は、これは正しいアプローチであるかどうかを知りたいと任意の代替がある場合

EDITこのフィールドは、ユーザーの入力し、それから来ているように私はevalを避けるためにしようとしている

(すなわちnew RegExp(...)を使用して)しまいます何か悪意のあるものがdbに送られた場合、問題になる可能性があります。

+0

をあなたを取得する必要があります(' ig' ) – Phil

+1

または正規表現を使ってそれらを解析してください。 :-) –

答えて

2

これは、あなたが `使う新しいRegExp`しかし、あなたは(`/`)区切り文字を削除する必要があるとフラグを分離したい可能性があり

const rxFinder = /^\/(.+)\/((g|i|m|u|y)*)$/ 
 
const resName = '/user[1-5]/ig' 
 

 
const resRx = new RegExp(...rxFinder.exec(resName).slice(1)) 
 

 
console.info(resRx) 
 

 
const testStrings = ['String for User5, eh', 'Bad User7 string'] 
 

 
testStrings.forEach(str => { 
 
    console.info(JSON.stringify(str), 'is a match:', resRx.test(str)) 
 
})

+1

フラグがない場合、このバージョンは失敗します。それらをオプションにすることもできます。 –

+0

'const RegExp(matches [0]、matches [1])$ ​​/ g.exec(resName);'おそらく動作する可能性があります。 ; 'このようにフラグも保存されます – Miquel

+0

@ScottSauyet良いキャッチです。 – Phil