[JavaScript] 하위 도메인 권한 url 정규식 확인

소개



@htsign 씨에게 지적 받았으므로 기사 정정하고 있습니다!
@htsign 씨 정말 감사합니다!

제목이 적당해서 죄송합니다
『이 정규 표현에서는 이것이 다가버려요! 』등 있으면 가르쳐 주시면 기쁩니다.
『이 정규 표현 어디에서 사용하는가?』입니다만, 주로 피싱 사기 대책일까? 라고 생각합니다.
어떻게 쓸까 고민해 버렸기 때문에 qiita에 실었습니다.

가정 URL



이번 『모델』은 qiita로 하겠습니다

○합격의 url 예http://qiita.comhttps://qiita.comhttps://sample.qiita.comhttps://qiita.com/samplehttps://qiita.com/sample/aaaa?a=aahttps://qiita.com/sample/aaaa?a=aa&b=bbhttps://b.qiita.com/sample/aaaa?a=aa&b=bb
× 불합격 URL 예http://qiitaacomhttp://a.com/qiita.comhttps://a.com/qiita.comjavascript:alert( 'test' )https://aqiita.comhttps://a.com?qiita.com=ahttps://aaa.com/qiita.com?a=aa

정규식


/^(https|http):\/\/([a-z]{1,}\.|)(qiita\.com)(\/(.*)|\?(.*)|$)$/g;

「캡쳐」없이 하고 싶은 경우의 기술은 이하입니다!
/^(?:https|http):\/\/(?:[a-z]{1,}\.|)(?:qiita\.com)(?:\/(?:.*)|\?(?:.*)|$)$/g;

일단 캡처 없음 이미지입니다!

htps : // 루부 r. 코m/
$\tiny{Ruby용의 정규 표현의 툴입니다만, 정규 표현은 거의 변하지 않기 때문에, 자주 사용시키고 받고 있는 툴입니다! }$

캡처란, 나중에 「()」에 들어간 것을 꺼낼 수 있는 것.
캡쳐로 해 두는 것으로 배열로 해 두어 놓아 주기 때문에,
나중에 일치하는 값이 무엇인지 알고 싶을 때 등 매우 편리!
그러나
그렇지 않은 경우 다음과 같은 것이 있으므로 하지 않는 것이 좋습니다.

수백만회 정도 실행하면 성능에 차이가 나올 것으로 보입니다.

덧붙여서 캡처 없이 하고 싶은 경우는 「(sample)」라고 하는 기술을 「(?:sample)」라고 하는 느낌으로 합니다.

구체적인 판단 체크 코드


const newValue = 'https://sample.qiita.com';
const pattern1 = /^(https|http):\/\/([a-z]{1,}\.|)(qiita\.com)(\/(.*)|\?(.*)|$)$/g;
const result1 = pattern1.test(newValue);
if (result1) {
    console.log('合格', result1)
}else{
    console.log('不合格', result1)
}

정규 표현 방법에 대해



여러가지 방법이 있으므로 모두 보고 싶다고 말하는 분은 이하의 MDN의 사이트를 봐 주세요!
참고: htps : //에서 ゔぇぺぺr. 모잖아. 오 rg / 자 / 도 cs / 우 b
이번에는 『exec』과 『test』의 차이에 대해 설명합니다.

그건 그렇고,이 장소는 위의 코드에서 말하면 다음 부분입니다!
const result1 = pattern1.test(newValue);

차이점이지만 'exec'은 검색이고 'test'는 테스트입니다.

그러므로, 대상으로 하는 것이 『있고 있다』 『있지 않다』만 알고 싶은 경우는 『test』를 사용한다는 느낌에 파악하는 것이 좋을 것 같습니다!

덧붙여서 값이 없을 때의 출력은
검색의 경우가 「null」,
테스트의 경우가 'false'
입니다.
RegExp.prototype.exec() //検索
RegExp.prototype.test() //テスト

정규식 설명




^(https|http):\/\/

시작부터 [https://] 또는 [http://] 확인

다른 쓰는 방법으로 ^https?:\/\/를 할 수 있습니다! 가르쳐 주셨습니다!
좋아하는 사람을 사용하십시오!


([a-z]{1,}\.|)(qiita\.com)
([a-z]{1,}\.|) (은)는 「a~z」의 알파벳 1 문자 이상 + 「.」 또는 아무것도 없음.

다른 쓰는 방법으로 ([a-z]{1,}\.)?를 할 수 있습니다! 가르쳐 주셨습니다!
좋아하는 사람을 사용하십시오!
(qiita\.com) 안의 「.」는 「.」가 특수한 문자이므로 「\」에 의해 이스케이프 하고 있다고 하는 느낌입니다.

그 밖에도 허가하고 싶은 경우 (qiita\.com|aaa\.com) 와 같이 쓰면 괜찮습니다.
※이스케이프…특수한 문자를 단순한 문자열로서 인식하기 위한 것


(\/(.*)|\?(.*)|$)

'/'+ 무슨 문자가 와도 좋다
※도메인 뒤에 패스가 계속된다고 가정

『?』+ 무슨 문자가 와도 좋다
※도메인 뒤에 파라미터가 계속된다고 가정

아무것도
※도메인 뒤에 아무것도 오지 않는 가정

마지막으로



이상! 끝입니다! (。・ω・。)
지금 졸려요!

좋은 웹페이지 즐겨찾기