2011-12-27 5 views
18

트위터 사용자 이름과 일치하는 자바 스크립트 정규식이 필요합니다.트위터 아이디에 대한 정규 표현식

사용자 이름은 가입하는 동안 사용자가 입력하므로 너무 많은 오류 알림으로 사용자를 혼란스럽게하고 싶지 않습니다. 따라서 사용자 이름 앞에 @가 있으면 유효한 사용자 이름과 일치하는 표현식이 필요합니다.

Twitter 사용자 이름은 라틴 문자, 밑줄 및 숫자를 포함 할 수 있으며 유일한 제한은 최대 15 자까지 가능합니다. (하지만 누군가가 @ 앞에 사용자 이름을 입력 할 경우를 대비하여 16자를 일치시키는 정규식이 필요합니다.)

+0

이 링크 된 질문의 중복이 아니다. – bevanb

답변

30

이 수행해야합니다 ^@?(\w){1,15}$

+0

이 작업이 완료됩니다. – ppp

+4

비록 그것은 단지 OP를 찾으려고 할지라도 '정규식'을 모르는 사람들을 위해 일반적인 코멘트를 만들고 싶었습니다. 이 테스트는 '정규식'엔진의 버전에 따라 지정된 텍스트 행 또는 문자열에있는 유일한 문자 집합 만 검사 할 경우에만 일치합니다 (^ 및 $ 사이에 포함 된 이유가이 테스트에 해당합니다). 같은 줄이나 문자열에있는 공백 문자를 포함한 다른 문자가 있으면 실패합니다. 사실을 말하고 싶으므로 누군가이 텍스트를 전체 텍스트 검색과 같은 용도로 사용하지 않습니다. :) – techexpert

+0

여기서 '?'의 역할은 무엇입니까? – San

0

"비 라틴어" 문자를 제외하려면, 당신은 사용해야합니다 : ^@?([a-zA-Z0-9_]){1,15}$은. 왜냐하면 \w은 "모든 단어 문자"를 허용하기 때문입니다. 비 라틴 문자가이 조건을 충족시킵니다. 따라서 터키어 문자도 마찬가지로 üö과 일치합니다.

+0

사실이 아니다. \ w는 [a-zA-Z0-9_]와 정확하게 일치하고 그 외에는 일치하지 않습니다. – asenovm

+2

댓글을 달기 전에 먼저 테스트를 거쳐 사실인지 확인하십시오. 그것을 여기에서보십시오 : http://jsfiddle.net/wBPEQ/ –

+1

나는 이것이 무엇을 증명하는지 보지 못합니다. 내가 말하고자하는 것은 \ w가 [a-zA-Z0-9_]와 동일하고 \ w가 영어 알파벳에있는 것과 다른 문자와 일치하지 않는다는 것입니다. – asenovm

24

트위터 사용자 이름이 여러 번 나타나는 것으로 보아도 가장 좋은 해결책입니다.

트릭을 수행하는 정규 표현식은 /(^|[^@\w])@(\w{1,15})\b/입니다. 나는 @ 사용자의 뒤에 서있는 것을 잡기 때문에 사용자 이름을 바꿀 수있다. 그리고 전역 일치 플래그 (g)를 사용하여 모든 일치를 대체합니다. asenovm 대답은 간단하지만 대부분의 사용자 입력 컨텍스트에서는 작동하지 않습니다. techexperthis comment에 설명되어 있습니다.

var output, 
    text = "@RayFranco is answering to @AnPel, this is a real '@username83' but this is [email protected], and this is a @probablyfaketwitterusername", 
    regex = /(^|[^@\w])@(\w{1,15})\b/g, 
    replace = '$1<a href="http://twitter.com/$2">@$2</a>'; 

output = text.replace(regex, replace); 

console.log (output); 

이 (노드 v0.9.1 테스트) 내가 을 기대했던 저를주고있다 : @AnPel에 응답

@RayFranco되고, 이것이 진짜 '@username83'하지만 이것이 @ 이메일입니다 .COM, 이것은 이것은 Twitter "specs" for username을 기반으로

@probablyfaketwitterusername입니다 :

사용자 이름은 15자를 초과 할 수 없습니다. 귀하의 실명은 더 길 수 있지만 (20 자) 사용자 이름은 쉽게하기 위해 더 짧게 유지됩니다. 위에서 언급 한 것처럼 밑줄을 제외하고는 사용자 이름에 영숫자 문자 (A-Z, 숫자 0-9) 만 사용할 수 있습니다. 원하는 사용자 이름에 기호, 대시 또는 공백이 없는지 확인하십시오.

희망이 있습니다.

2

짧은 쉬운 방법은 그것을 할 수 있습니다 :

function validTwitteUser(sn) { 
    return /^[a-zA-Z0-9_]{1,15}$/.test(sn); 
} 
0

당신이 필요로하는 것보다 더 많은 경우가 있습니다 만, 나는 "regex how to replace twitter links"다른 게시물이 발견했다. @usernames, #hashtags 및 url을 래핑합니다. 나를 위해 잘 작동합니다. 허용 솔루션은 "긍정적 인 전환 확인"을 사용하거나 자바 스크립트 (파이어 폭스 적어도)에서 지원하지 않는 somesuch 때문에

function processTweetLinks(text) { 
    var exp = /(\b(https?|ftp|file):\/\/[-A-Z0-9+&@#\/%?=~_|!:,.;]*[-A-Z0-9+&@#\/%=~_|])/gi; 
    text = text.replace(exp, "<a href='$1' target='_blank'>$1</a>"); 
    exp = /(^|\s)#(\w+)/g; 
    text = text.replace(exp, "$1<a href='https://twitter.com/hashtag/$2?src=hash' target='_blank'>#$2</a>"); 
    exp = /(^|\s)@(\w+)/g; 
    text = text.replace(exp, "$1<a href='http://www.twitter.com/$2' target='_blank'>@$2</a>"); 
    return text; 
}