2015-01-08 2 views
0

정규식을 사용하여 텍스트 필드에 허용되는 특정 문자 세 개만 허용하는 방법에 대한 오랜 연구를 해왔지만 해결 방법은 없습니다.정규식을 사용하여 텍스트 필드에 특정 문자 허용

내가 시도하는 방법은 +, (, ), (공간) 아니라고 임의의 문자 또는 숫자를 대체하는 것입니다.

(^[\+\(\)\s0-9]+) 

을하지만 작동하지 않습니다

내가 시도가 정규식

은 다음과 같습니다. 내가 틀렸다면 나는 모른다.

내가는 위의 정규식을 이해 :이 문자열이 내가 다음을 수행가, (, + ), 하지 ^하는 문자 또는 내 자바 스크립트에서 다음 0-9

사이의 숫자가 포함 된 경우 :

var $text = $('#text_field'); 

if(0 < $text.length) 
{ 
    $text.on(
     'keyup', 
     function(e) 
     { 
      var $val = $(this).val(); 

      $val = $val.replace(/(^[\+\(\)\s0-9]+)/, ''); 

      $(this).val($val); 
     } 
    ); 
} 

하지만 불행히도 이것은 작동하지 않습니다.

누군가 제발 나를 도와 줄 수 있습니까?

^(^[\+\(\)\s0-9]+)$ 
(^[\+\(\)\s\d]+) 
^(^[\+\(\)\s\d]+)$ 

를하지만 여전히 작동하지 않습니다

은 또한 다음과 같은 시도 할 수 있습니다.

+0

어떤 테스트 값을 사용하고 있습니까? – Shekhar

+1

"\ s"대신 ""을 실제로 입력하십시오. Perl에서 도움이되는 몇 가지 상황을 접했습니다. – tjwrona1992

+0

나는 사용자가 자신의 전화 번호를 입력 할 양식을 만들려고하고, 나는 위에서 언급 한 특정 문자 만 입력 할 수있게하고 싶다. 나는 그것을 입력하는 방법에 상관하지 않습니다. 필자는 특정 필드의 문자 범위 만 엄격하게 지정하면됩니다. –

답변

2

문자 클래스로 ^을 이동하십시오.

/[^\d)(+ ]/ 
  • [^\d)(+ ] 부정적인 (negated) 문자 클래스 즉. 클래스에있는 문자 이외의 문자와 일치합니다.

문자 클래스 외부 ^은 문자열 시작 부분과 일치하는 앵커의 역할을합니다. 일단 그것이 문자 클래스로 옮겨지면, 반대로 일치합니다.

테스트

"asdf123(+123) 1234asdf".replace(/[^\d)(+ ]/g, ""); 
=> 123(+123) 1234 

Regex Demo

+0

아 !! 그래 알았어. 나는'^ '문자를'[]'집합 바깥에 넣었다. 감사 !! 당신의 대답을 약 4 분 동안 올바른 것으로 표시 할 것입니다;) 감사합니다 !! –

+0

@MerianosNikos 네, 네가 틀렸던'^'의 포스팅 일 뿐이야. 캐릭터 클래스 내부에서는 모든 것이 특수한 것이므로'('')''+'등을 벗어날 필요가 없다. – nu11p01n73R

2

문제는 당신이 대괄호 안에 ^이 필요하다. 또한 전역 적으로 실행해야하므로 replace(/([^\+\(\)\s0-9]+)/g, "")이 작동해야합니다.

관련 문제