문자열이 http : // 또는 https : //로 시작하는지 테스트 할 정규식


200

나는 문자열의 시작을 검사하는 정규 표현식을 설정하기 위해 노력하고있어, 그것이 하나가 포함 된 경우 http://또는 https://그것과 일치해야합니다.

어떻게해야합니까? 작동하지 않는 다음을 시도하고 있습니다.

^[(http)(https)]://

5
문자열의 시작 부분 만 확인하는 경우 문자열의 처음 몇 문자를 원하는 패턴과 직접 비교하는 것이 더 빠를 것입니다.
templatetypedef

2
캐릭터 그룹 을 생성하고 []있습니다. 그것은 마하 것 하나 하나 개입니다 문자 (, ), h, t, t, p또는 s. 즉 그것은 일치하는 것이 s://아니라 ht://x://.
Felix Kling

2
@ templatetypedef : 나는 조기 최적화를 느낀다고 생각합니다.
cdhowie

4
많은 현대 정규식 라이브러리는 매우 빠릅니다 . 이상 - - (많이) 백 추적이되지 않는 한, 정규 표현식은 호의적으로 비교할 수있다 스타일 접근 "지수의"(비교에 /^x/indexOf(x) == 0). "로 시작이"스타일이 적은 오버 헤드있을 수 있습니다 접근,하지만 난 그게 거의 중요하지 않습니다 생각 - 잘 할 수있는, 가장 깨끗한 무엇인지 선택합니다 x.StartWith("http://") || x.StartsWith("https://")-하지만 코드 선명도에서 그렇게하지 시도가 정당화하지 않는 성능을 향상시키기 위해 분석 및 요구 사항 :-)

답변:


353

사용 []이 잘못되었습니다. []이는 문자 클래스 를 나타내므로 한 문자와 만 일치합니다. 표현은 [(http)(https)]"일치하는 변환 (, h하는 t하는 t하는을p 하는 ), 또는를 s." 중복 문자는 무시됩니다.

이 시도:

^https?://

실제로 대체를 사용하려면이 구문을 대신 사용하십시오.

^(http|https)://

PHP 입력 문자열 : $ regex = '/ ^ (https? : \ / \ /)';
Steve Tauber

9
스티브, 나는 당신이 마지막에 /를 놓쳤다 고 생각합니다 : $ regex = '/ ^ (https? : \ / \ /) /';
Axi

10
일부 너트가 실수로 http 대문자 인 경우를 대비하여 $ regex = '/ ^ (https? : \ / \ /) / i';
jeffkee

3
\를 사용하여 탈출하는 것을 잊었습니다. 그렇습니다 ^https?:\/\/. 내가 맞아?
Shafizadeh

4
@Shafizadeh /는 정규 표현식에서 특수 문자가 아니며 /리터럴 정규 표현식을 표기하는 데 사용되는 언어에서만 사용됩니다. 예를 들어, /C # 정규식은 부분적으로 문자열 리터럴로 표현되므로 C #을 사용할 때는 정규식 에서 이스케이프 할 필요가 없습니다 . 예를 들어 Perl (에서와 같이 대체 구분 기호를 사용하는 경우)에서도 필요하지 않습니다 m#^https?://#. 따라서 귀하의 의견을 직접 해결하기 위해 : (a) 아니오, 나는 아무것도 탈출하는 것을 잊지 않았습니다. (b) 선택한 언어로 특별히 취급되는 캐릭터는 모두 탈출해야합니다.
cdhowie

43

대소 문자 구분 :

var re = new RegExp("^(http|https)://", "i");
var str = "My String";
var match = re.test(str);

25
^https?://

상황에 따라 슬래시를 이스케이프해야 할 수도 있습니다.




0

이것은 URL 인코딩 문자열에서도 작동합니다.

^(https?)(:\/\/|(\%3A%2F%2F))

0

이 대소 문자를 구분하지 않는 것은 asp.net에서 작동하지 않았으므로 각 문자를 지정했습니다.

다음은 asp.net RegularExpressionValidator 에서 작동시키기 위해 수행해야 할 작업입니다 .

[Hh][Tt][Tt][Pp][Ss]?://(.*)

노트:

  • (?i) 그리고 사용 /whatever/i자바 스크립트가 대소 문자를 구분하지 않기 때문에 이 아마 작동하지 않았습니다.
  • 원래 ^처음에는 있었지만 문제가되지 않았습니다. 그러나 (.*)(표현은 없이는 작동하지 (.*)않았지만 없이는 작동했습니다.^ )
  • 탈출 할 필요는 //없었지만 좋은 생각 일 수 있습니다.

필요한 경우 전체 RegularExpressionValidator는 다음과 같습니다.

<asp:RegularExpressionValidator ID="revURLHeaderEdit" runat="server" 
    ControlToValidate="txtURLHeaderEdit" 
    ValidationExpression="[Hh][Tt][Tt][Pp][Ss]?://(.*)"
    ErrorMessage="URL should begin with http:// or https://" >
</asp:RegularExpressionValidator>
당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.