2017-03-08 1 views
1

나는 데이터를 저장하기 위해 mongodb를 사용하고있다. 나는 문자열로 전체 정규 표현식을 저장하고 싶습니다 :정규식 문자열 패턴

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

나는 정규식을 저장할 수있는 모듈 mongoose-regexp가 알고 있지만, 나는 같은 필드에 정규식 문자열을 저장하고 싶습니다.

eval(user.permissions[i].resName).test(resName)을 사용하여이를 달성했습니다. 나는 이것이 올바른 접근 방식 있는지 알고 좋아하고 어떤 대안이 경우

편집이 필드는 사용자의 입력과 그것에서오고 나는이 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 ([0], matches [1])) $/g.exec (resName);'어쩌면 작동 할 수도 있습니다. ; ', 이런 식으로 깃발도 보존됩니다. – Miquel

+0

@ScottSauyet 잘 잡습니다. – Phil