2013-10-21 3 views
0

텍스트 입력에 입력 된 URL을 감지하고 싶습니다. 나는 무엇의 시작 부분에 http://를 앞에 추가합니다 다음과 같은 코드가 입력되어있다 :정규 표현식 URL을 감지하고 앞에 추가 http : //

var input = $(this); 
var val = input.val(); 
if (val && !val.match(/^http([s]?):\/\/.*/)) { 
    input.val('http://' + val); 
} 

어떻게 그것이 TLD 다음 문자열을 포함하는 경우에만 http://를 추가로이 적응 가겠어요?

Hello. This is a test 

http://가이 URL이 아니더라도, 안녕하세요에 추가 얻을 것이다 : 순간 나는 예를 들어, 문자열을 입력합니다. 어떤 도움이라도 대단히 감사하겠습니다.

+0

http : // localhost와 같은 경우 어떻게됩니까? –

+0

im은 localhost에 대해 걱정하지 않습니다 :) – danyo

+0

그래서 유효한 URL 또는 TLD로 정의되는 것은 무엇입니까? 기업이 .canon과 같은 새 TLD를 만들면 어떻게됩니까? –

답변

0

내가 발견 한 가장 좋은 방법은 다음과 같은 정규식을 사용하는 것입니다.

기본 유효성 검사에는 문제가없는 것으로 보입니까? 발생할 수있는 문제가 있으면 알려주십시오.

나는 그것이 이메일 주소를 감지 할 것이지만,이 경우에는 중요하지 않다.

0

이 간단한 기능은 저에게 효과적입니다. 우리는 속도를 얻기 위해 TLD 도메인의 실제 존재에 신경 쓰지 않고 example.com과 같은 구문을 확인합니다.

미안 해요, VBA는 때문에,은() JS의 고유 함수가 아닙니다 트림 것을 잊어 버린 :

// Removes leading whitespaces 
function LTrim(value) 
{ 
    var re = /\s*((\S+\s*)*)/; 
    return value.replace(re, "$1"); 
} 

// Removes ending whitespaces 
function RTrim(value) 
{ 
    var re = /((\s*\S+)*)\s*/; 
    return value.replace(re, "$1"); 
} 

// Removes leading and ending whitespaces 
function trim(value) 
{ 
    return LTrim(RTrim(value)); 
} 

function hasDomainTld(strAddress) 
{ 
    var strUrlNow = trim(strAddress); 
    if(strUrlNow.match(/[,\s]/)) 
    { 
    return false; 
    } 
    var i, regex = new RegExp(); 
    regex.compile("[A-Za-z0-9\-_]+\\.[A-Za-z0-9\-_]+$"); 
    i = regex.test(strUrlNow); 
    regex = null; 
    return i; 
} 

그래서 코드, $ (이) 윈도우 객체, 그래서 나는 objInput 통과 인수를 통해, 대신 jQuery를의 고전 JS를 사용하여 :

function checkIt(objInput) 
{ 
    var val = objInput.value; 
    if(val.match(/http:/i)) { 
    return false; 
    } 
    else if (hasDomainTld(val)) { 
    objInput.value = 'http://' + val; 
    } 
} 

자신을 테스트하십시오 http://jsfiddle.net/SDUkZ/8/

+0

실례가 있습니까? – danyo

0

을 당신은 좁힐 필요 정규 표현식으로 URL을 탐지하는 것은 매우 까다로울 수 있으므로 먼저 요구 사항을 낮추십시오. (domain.com/Everything you need to know about RegEx.aspx를)

  • IDN을 (госуслуги.рф)
  • 퓨니 코드 (Punycode) 케이스 (xn--blah)
  • 새로운 TLD가 등록되는 (.amazon)
  • SEO 친화적 인 URL을 : 이들은 당신의 파서가 실패 할 수 있습니다 몇 가지 상황입니다

우리는 최근에 비슷한 문제에 봉착했습니다. URL이로 시작하는지 여부를 간단히 확인했습니다., https:// 또는 ftp://이고 앞에서 설명한 방법으로 시작하지 않으면 http://이 붙습니다. TypeScript의 구현은 다음과 같습니다.

public static EnsureAbsoluteUri(uri: string): string { 
    var ret = uri || '', m = null, i = -1; 
    var validSchemes = ko.utils.arrayMap(['http', 'https', 'ftp'], (i) => { return i + '://' }); 

    if (ret && ret.length) { 
    m = ret.match(/[a-z]+:\/\//gi); 

    /* Checking against a list of valid schemes and prepending with "http://" if check fails. */ 
    if (m == null || !m.length || (i = $.inArray(m[0].toLowerCase(), validSchemes)) < 0 || 
     (i >= 0 && ret.toLowerCase().indexOf(validSchemes[i]) != 0)) { 

     ret = 'http://' + ret; 
    } 
    } 

    return ret; 
} 

여기서 알 수 있듯이 가능한 모든 URL 형식을 예측할 수는 없으므로 여기에 똑똑한 시도가 아닙니다. 게다가,이 방법은 대개 URL로 간주되는 필드 값에 대해 실행되므로 오 검출 변경이 최소화됩니다.

희망이 도움이됩니다. 2/3 문자의 한계 확장에 대한

/\.[a-zA-Z]{2,3}/ 

따라서 url 후 .을 감지하고 문자 :