2013-06-20 3 views
0

나는 사용자가 도메인 이름을 입력 프로토콜을 포함 될 경우이를 감지하기 위해 정규식을 사용하고 필요 - 내가 원하지 않는 그들에게해야 할 일 : 그것은 97 일하고내 도메인 이름 정규식 정제

if (/^[^http:\/\/|www.][a-zA-Z0-9\-]+\.(co\.uk|com|net|biz|org|org\.uk|eu|me\.uk)$/i.test(inp2){ 
    ... ok ... 
} 

시간의 %는 그때 왜 일부 이름이 실패했다는 것을 깨달았습니다 - 전체 프로토콜과 일치하지 않는 것은 문자 h, t, t, p 또는 w, w, w를 갖는 모든 것과 일치합니다. 대신 'http// : '또는'www. ' 함께 테스트 할 때

내가 발견 :

**hattooflat.com** 

통과해야하지만, 문자 h를, t, t는 내가 B \ 단어 경계가 필요하다고 생각하지만, 어디 확실하지 메신저

실패하게되는 :

(/^\b[^http:\/\/|www.]\b[a-zA-Z0-9\-]+\.(..... 

또는

(/^[^\bhttp:\b\/\/|\bwww\b.][a-zA-Z0-9\-]+\.(..... 
,

나는 메신저 가까이 알 - 정규 표현식에 여전히 사실

+0

어떤 정규식 엔진을 사용하고 있습니까? 엔진이 부정적인 선견자를 지원할 수 있다면, 그렇게 할 수 있습니다. – Jerry

+2

임의의 TLD를로드하는 대신 끝에 ([A-Za-z0-9 \ -] + \.)? [a-z] {2,6}'를 사용하는 것이 좋습니다. –

+1

대괄호를 사용하여 하위 문자열을 그룹화 할 수 없습니다. – speakr

답변

4

dev'ing 사년 ​​후 나에게 슬픔을주고있다, 당신은 look-aheads 필요합니다

/^(?!https?:\/\/|www\.)[a-zA-Z0-9\-]+\.(co\.uk|com|net|biz|org|org\.uk|eu|me\.uk)$/i 

참조, 또한,이 short demo.


짧은 설명 :

  • ^ : (한 줄 입력을 가정하여) 문자열의 시작을 맞 춥니 다.

  • (?!<...>)

    : 어떤 문자를 소비하지 않지만, 앞서보고 문자열의 다음 부분은 하지 경기 <...> (음보기 미리를)하지 있는지 확인하십시오.

  • https?:\/\/|www\. : 일치 하나 http:// 또는 https:// 또는 www. ('들'낙찰 후 ?을 "선택").

  • [a-zA-Z0-9\-]+ : 하나 이상의 영숫자 또는 '-'가 포함 된 모든 시퀀스와 일치시킵니다.

  • \. : 한 점 ('.')과 일치하십시오.

  • (co\.uk|com|net|biz|org|org\.uk|eu|me\.uk) 매치 중 co.uk 또는 com 또는 net 또는 ...

  • $ (한 라인 입력을 상정)는 문자열의 끝과 일치.일반 식

+0

좋아, 첫 번째 대답을 준 사람은 자신의 게시물을 삭제하지 않으므로 표시하지 않습니다. - 당신도 나에게 당신의 것을 표시하는 데 도움이 될 중요한 바이올린 예제와 설명을 가지고 있습니다. 많은 감사 – gone

+1

@ user962902 큰 이 대답과 푸 루스 키스의 차이. 이안 로버츠의 대답을 보라. – Jite

+0

그게 바로 지금 그걸로 알고있어 - 그게 잘못 되었기 때문에 - 올바른 결과를 만들어 냈지만 - Puuskis에게 그걸 전달할 수는 없었어. – gone

2

대괄호 너무

[^http:\/\/|www.] 

[^:/|.htpw] 같은 수단 H, t, P가 아닌 임의의 단일 문자 일치 문자 클래스를 나타낸다 :,/, |, w 또는. 당신은 아마 부정적 예측을 원하는 대신 정규식을 사용하지 왜 http://, https:// 또는

0

그냥 프로토콜 및 하위 도메인없이 도메인 이름을 확인하려면 www.로 시작하지 않는 문자열과 일치

^(?!https?:\/\/|www\.) 

:

^([a-zA-Z0-9]{2}|([a-zA-Z0-9][a-zA-Z0-9\-])+[a-z0-9])\.(co\.uk|com|net|biz|org|org\.uk|eu|me\.uk)$ 

정규식은 비 연속적인 (비 후행, 비 선도적) 하이픈을 포함한 길이 3 길이 2 및 도메인 이름으로 도메인 이름을 수 있습니다.

+0

명시된 tld 만 허용되었고 다른 것은 허용하지 않는 것이 중요했다. -z0-9 \ -] 허용 http, www 그들은 단지 도메인 이름과 같은 문자입니다 – gone

+0

@ user962902 좋아요, 고쳤습니다. – speakr