regex
2013-07-04 4 views 0 likes 
0

/dashboard 또는 something/without/a/slash/at/the/beginning으로 시작하는 href가있는 모든 HTML 앵커와 일치하는 정규식은 /href=('|")(\w+|\/dashboard)/입니다.정규식을 수정하여 특정 문자열을 포함하는 입력을 필터링하십시오.

그래서이 정규식 일치 :

<a href="/dashboard/security-settings"></a> 
<a href='dashboard/security-settings'></a> 
<a href='something/security-settings'></a> 

하지만하지 :

<a href="/home"></a> 
<a href="/about"></a> 

여기서 문제는도 일치한다는 것입니다 :

<a href="http://www.google.com"></a> 
<a href="www.facebook.com"></a> 

을 나는 HREF의이 http 시작으로 필터링 할 수있는 방법 또는 www에서 정규식? 나는 행운으로 ^ 운영자와 함께 연주 시도 :

href=('|")(([^http][^www]|\w+)|\/dashboard) 
+0

어떤 언어? 정규식을 사용하는 이유는? html 파서를 사용합니다. – Anirudha

답변

1

^을 개별 문자가 아닌 문자열에 character class 작품에서. 따라서 [^http]은 실제로 "h도 아니고 t도 아니고 p도 아닌 하나의 문자와 일치"를 의미합니다.

당신은 negative lookahead assertion 대신 필요

href=(['"])(?!http|www)(\w+|/dashboard) 
0

가장 간단한 해결 방법은 다음과 같습니다

/^href=['"](\w+|\/dashboard)/ 

(정규 표현식의 시작 부분에 사용하는 경우) ^ 연산자는 정규 표현식 만 일치되어 있는지 확인합니다 줄의 시작 부분에 있으므로 href으로 시작하는 문자열 만 일치합니다.

다른 언급했듯이 음수 미리보기을 사용하여 http 또는 www으로 시작하는 문자열을 명시 적으로 걸러 낼 수 있습니다. 그러나 문자열이 ftp:// (또는 "http"또는 "www"이외의 다른 접두사)로 시작하는 경우 "http"및 "www"에 대한 부정적 미리보기를 사용하여 문자열을 계속 일치시킵니다. 이 경우에는 일치하지 않으려는 모든 것을 담은 블랙리스트보다는 화이트리스트를 사용하는 것이 좋습니다.

관련 문제