영숫자, 대시 및 밑줄 (공백 없음) 정규식 확인 JavaScript


92

정규식에 대해 입력을 확인하려고합니다.

필드는 영숫자 문자, 대시 및 밑줄 만 허용해야하며 공백은 허용하지 않아야합니다.

그러나 아래 코드는 공백을 허용합니다.

내가 무엇을 놓치고 있습니까?

var regexp = /^[a-zA-Z0-9\-\_]$/;
var check = "checkme";
if (check.search(regexp) == -1)
    { alert('invalid'); }
else
    { alert('valid'); }

5
나는 아래 Andy E의 대답을 좋아합니다. 또한 빠른 정규식 편집을 위해 gskinner.com/RegExr 을 확인하는 것이 좋습니다 . 이거 ... 꽤 달콤 해.
pixelbobby 2011 년

답변:


155

그러나 아래 코드는 공백을 허용합니다.

아니요, 그렇지 않습니다. 그러나 길이가 1 인 입력에서만 일치합니다. 길이가 1보다 크거나 같은 입력의 경우 +다음 문자 클래스 가 필요합니다 .

var regexp = /^[a-zA-Z0-9-_]+$/;
var check = "checkme";
if (check.search(regexp) === -1)
    { alert('invalid'); }
else
    { alert('valid'); }

참고 그 어느 것도 -(이 경우)이나 _필요 탈출.


16

부울 값에만 관심이 있다면 String.match/abc/.test("abcd") 대신 RegExp.prototype.test (예 : String.search () 대신)를 사용 하면 안됩니다 . Andy E의 답변에 설명 된대로 캐릭터 클래스를 반복해야합니다.

var regexp = /^[a-zA-Z0-9-_]+$/;

8
실제로 RegExp.prototype.test부울에만 관심이있는 경우이 메서드를 사용해야합니다 .
Andy E

8

이 구문은이 시점에 게시 된 답변보다 약간 더 간결하며 동일한 결과를 얻습니다.

let regex = /^[\w-]+$/;

1
귀하의 답변이 국제 문자에도 적용된다는 메모를 추가하는 것을 고려하십시오. JavaScript에서는 확실하지 않지만 bash에서는 작동합니다.`echo "abc-def däf_ghi"| egrep -wo '(\ w |-| _) +'
Ivan

4

어리석은 오류가 있습니다. 누군가 유용하다고 생각되면 여기에 게시하십시오.

  1. -\._ -하이픈, 점 및 밑줄을 의미합니다.
  2. \.-_ -점에서 밑줄까지 범위의 모든 기호를 의미합니다.

# 2는 대괄호 안에있는 경우에만 적용됩니다. 즉 [\ .-_]는 점에서 밑줄까지의 범위에있는 문자입니다. 그러나 대괄호가 없으면 둘 다 세 개의 기호의 시퀀스이며 순서가 다릅니다.
erict

1

밑줄을 벗어나지 마십시오. 약간 엉망이 될 수 있습니다.


1
왜 그런 말을 해? 밑줄 을 이스케이프 할 필요 가 없다는 것을 알고 있지만 \_JavaScript 또는 기타 정규식 버전에서 문제 를 일으키는 것은 들어 본 적이 없습니다 .
Alan Moore

1
순수한 추측. 그렇지 않으면 표현이 괜찮아 보였고 어떤 경우에도 공백과 일치해서는 안되지만 그냥 버렸습니다. 아마도 대답이 아닌 코멘트 였을 것입니다.
David Fells


0

이것을 시도하십시오, 그것은 나를 위해 잘 작동합니다.

"^([a-zA-Z])[a-zA-Z0-9-_]*$"
당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.