2010-12-22 3 views
8

공백, '-', ',' '.', '('및 ')'문자 만 대문자 만 허용하는 정규식을 만들려고합니다. . 이것은 내가 지금까지 가지고있는 것이지만 어떤 이유로 든 여전히 숫자를 입력하게합니다.Regex는 문자와 일부 문자 만 허용합니다.

^[a-zA-Z -,.()]*$ 

어떤 도움이 될 것입니다! 감사.

+2

정규식 토큰 인 이스케이프 문자 :.() –

+1

@ Mathias E : 캐릭터 그룹 내에서 모든 정규식 토큰을 이스케이프 할 필요가 없습니다. – unholysampler

+0

실제로 사용하고있는 정규 표현식입니까? – Gumbo

답변

3

글쎄, 이 범위로 해석되는데, 예를 들어 a-z과 같이 공백의 모든 문자를 쉼표로 사용할 수 있습니다. 탈출하고 적어도 버그 중 일부는 수정해야합니다. 사람들은 정규 표현식에서 특별한 의미를 갖고 있기 때문에

^[a-zA-Z \-,.()]*$ 

은 엄격하게, 너무, 당신은 아마 또한 .()을 탈출해야한다, 말하기. Javascript 정규식 엔진 (테스트 중이던 곳)은 어쨌든 [] 컨텍스트 내에서 문자 그대로 해석 할 수 있지만 항상 명시 적으로 표시하는 것이 좋습니다. 실제 코드가 것이 아니라, 아마이 정규 표현식을 사용하는 문제를 가지고 있도록

^[a-zA-Z \-,\.\(\)]*$ 

그러나,이 여전히 0-9 자리를 허용 할 수 없습니다.

+0

문자 클래스 내에서'.','(',')'를 이스케이프 할 필요가 없습니다. 문자 클래스에서는']'와'\'와'-'와'^'(위치에 따라 다름)만이 특별한 의미가 있습니다. – Gumbo

+0

@ Gumbo : 아, 모든 정규식 엔진이 충분히 똑똑합니까? 알아두면 좋은 분 : – Matchu

+0

글쎄, 그렇게 생각해. – Gumbo

12

-은 특수 문자 클래스입니다. a-z과 같이 범위를 정의하는 데 사용됩니다.

^[a-zA-Z \-,.()]*$ 
     ^^ escaping \ 

또는

^[-a-zA-Z ,.()]*$ 
^placing it at the beginning. 

또는

^[a-zA-Z -,.()-]*$ 
      ^placing it at the end. 
:

당신이 그것을 탈출하거나 그러한가 범위 연산자로 작동하지 않을거야 배치하거나 필요 리터럴 - 일치 시키려면

및 흥미롭게도

하고 A 이미 범위에 포함되는 - (우리는 문자 그대로 처리 할 하나)의 - 주변 인물 모두가 그대로 다시 처리하기 때문에 최종 경우 -에서 6,
^[a-z-A-Z -,.()]*$ 
    ^placing in the middle of two ranges. 

a-zA-Z 사이의 장소입니다 .

언급 된 모든 방법 중에서 코드를 읽고 이해하기가 쉽기 때문에 이스케이프 방법을 사용하는 것이 좋습니다 (). \을 본 사람이라면 탈출구가 있어야합니다. -을 처음 (끝)에 배치하면 나중에 문자 범위에 문자를 추가하고 -을 이스케이프 처리하지 않고 문자를 추가하면 문제가 발생합니다.

+0

:/정규 표현식을 읽는 사람으로서, 나는 훨씬 멀리 벗어나는 것을 선호합니다. 다른 세 가지 대답을 살펴보면, 나는 이것이 애매한 행동의 의도적 인 사용보다 오타라고 생각할 가능성이 더 큽니다. – Matchu

+0

@Matchu : 당신과 동의하십시오. 내 글을 업데이트했습니다. – codaddict

+0

+1 좋은 답변입니다. – suryakiran

2

[a-zA-Z -,.()]  (0x20) ~ , (0x2C)의 범위를 기술한다. 그리고 이는 [ !"#$%'()*+,]과 같습니다. -을 탈출하거나 범위 표시기로 해석되지 않는 다른 곳에 두어야합니다.

그러나 숫자는 0x30에서 0x39까지이므로이 문제의 원인은 아닙니다.

0

자바 스크립트로 시도했지만 정상적으로 작동합니다. 하지만 나머지는 정확합니다. javascript에서 모든 것이 잘 작동하는지 확인하십시오. 그렇지 않으면 수표가 전혀 발생하지 않습니다.

관련 문제