2012-05-14 3 views
1

RegEx를 많이 사용하는 사용자는 아닙니다. 그러나 사용자 이름 필드의 입력을 확인하는 가장 좋은 방법은 문자 (위 또는 아래), 숫자 및 _ 문자 만 허용하고 사이트 정책에 따라 문자로 시작해야한다고 생각합니다. 내 RegEx와 코드는 다음과 같습니다.Javascript RegEx가 false를 예상대로 반환하지 않음

var theCheck = /[a-zA-Z]|\d|_$/g; 
alert(theCheck.test(theUsername)); 

다양한 조합으로 시도했지만 모든 것이 "true"를 반환합니다.

아무도 도와 줄 수 있습니까? 정규식으로

답변

3

귀하의 정규식 말하고는 "theUsername는 문자, 숫자를 포함, 또는 밑줄로 끝나지 않습니다."

대신을 시도

var theCheck = /^[a-z]([a-z_\d]*)$/i; // the "i" is "ignore case" 

이 "theUsername 편지로 시작하고 문자, 숫자, 밑줄을 포함"말했다.

참고 : 여기 "g"가 필요하다고 생각하지 않습니다. "모든 일치"를 의미합니다. 우리는 전체 문자열을 테스트하기를 원할뿐입니다.

+2

보너스, OP는 일반적인 정규식 패턴을 검색해야합니다. 다른 사람들이 그 고통을 겪었음을 확신하십시오. – Alfabravo

+0

이것은 첫 번째 문자를 문자로 강제합니까? – tip2tail

+0

@ tip2tail : 지금까지는 그렇지 않았습니다. –

1

사용이 :

^[A-Za-z][a-zA-Z0-9_]*$ 
+0

가 빈 문자열과 일치하지 않을까요 :

^([a-zA-Z][a-zA-Z0-9_]{3,})$ 

전체 패턴을 설명하려면? –

+0

아, 그래 ... 죄송합니다. 나는 또한 "편지로 시작해야한다"는 사실을 잊어 버렸다. – jahroy

+0

@ jahroy BTW,이 문제는 처음부터 처리해야하며, 전체 라인이 정확해야합니다. –

3

어떻게 이런 일에 대해 :

^ = Makes sure that the first pattern in brackets is at the beginning 
() = puts the entire pattern in a group in case you need to pull it out and not just validate 
a-zA-Z0-9_ = matches your character allowances 
$ = Makes sure that this must be the entire line 
{3,} = Makes sure there are a minimum of 3 characters. 
    You can add a number after the comma for a character limit max 
    You could also use a +, which would merely enforce at least one character match the second pattern. A * would not enforce any lengths 
+0

두 번째 블록의 길이가 초과되었습니다. '+'해야합니까 (우리는 얼마나 오래 있어야하는지 모르겠습니다). – Alfabravo

+0

@Alfabravo 사실 설명을 추가하려고합니다. 그러나, 적어도 2 + 문자가 될 것이라고 나는 희망했다. –

관련 문제