2013-01-14 2 views
6

내 텍스트 상자에 %_을 제외한 숫자, 문자 및 특수 문자를 허용합니다. 패턴이 /[[email protected]#$^&*()-+=]/입니다. 내가 언급 한 두 가지를 제외한 모든 특수 문자를 나열해야하기 때문에 최선의 방법이라고 생각하지 않습니다. 모든 특수 문자를 나열 할 필요가없고 언급 된 두 문자를 포함하지 않는 방법이 있습니까? BTW, 자바 스크립트 정규식을 사용하여.regex - "%"및 "_"을 어떻게 제외합니까?

데모를 들어 http://jsfiddle.net/ce8Th/

이 도와주세요를 참조하십시오.

답변

3

복잡한 루프가 필요 없습니다. 그냥 전체 문자열에 직접 replace 전화 : 당신은 역 다만 수 http://jsfiddle.net/ce8Th/1/

+0

정말 고마워서 코드를 훨씬 간단하게 만들었습니다. 이거 받아 들일거야. 몇 분 동안 그냥 졸도기. – NinjaBoy

+0

나는 이것이 위생적이지 않다는 것을주의 할 것이다. 그것은 괜찮을지 모르겠지만, 그것은 원래의 목록에없는 공백, 탭, 다른 임의의 것들을 제외한 다른 문자가 허용된다는 것을 의미한다. – jakerella

+0

@ 자케 렐라 - 원래 질문은 위생을 언급하지 않습니다. (그의 의도일지도 모르지만 어떤 경우에는 * 클라이언트 측은 쓸모가 없습니다.) –

2

: 여기

$(this).val(function (i, v) { 
    return v.replace(/%|_/g, ''); 
}); 

하면 바이올린의

/[%_]/ 

if (pattern.test(.... 

당신이 돈 경우는 '정규 표현식을 사용하지하는 것이 좋다 이 경우 큰 차이가 없다는 의미는 아닙니다.

if ("%_".split().indexOf(text.charAt(i)) > -1) { 
+1

나는/[^ % _] /'을 의미한다고 생각합니다. 그러나 조심해야만합니다. 탭, 줄 바꿈, 다른 언어 문자 등 많은 다른 문자도 포함될 것입니다. – jakerella

2

화이트리스트가 항상 최상입니다. 나는 길이 수정자를 추가를 제외하고 당신이 무엇을 유지하는 것이 좋습니다와 시작 및 종료 문자는 다음과 같습니다

/^[[email protected]#$^&*()-+=]+$/ 
1

난 당신이 부분을 검색 LIKE을 포함하는 MySQL의 쿼리에 대해이 사용자 입력을 사용하고 있는지 추측에 corrent 될 일이겠습니까 성냥?

그렇다면 문자를 제외하지 마십시오. 대신 서버 쪽에서 이스케이프 처리하십시오. 예 :

$output = str_replace(Array("%","_"),Array("\\%","\\_"),$input); 
+0

아니면 그냥 'addslashes ($ input);'? – jakerella

+0

@ addsuashes'addslashes'는'_'과'%'를 탈출 가능하다고 생각하지 않습니다. –

+0

어 ... 멋지지 않아. 감사. – jakerella

관련 문제