2009-06-16 7 views
2

문자열이 있는데 해당 문자열의 유효성을 검사하여 '/' '\' '\'와 같은 특정 문자가 포함되지 않아야합니다. ';' 등 ... 한꺼번에 어떻게 할 수 있습니까?자바 스크립트 문자열 유효성 확인

+2

허용되지 않는 문자의 차단 목록을 확인하는 대신 허용 된 문자 허용 목록과 비교하여 문자열을 확인하는 것이 좋습니다. 영숫자 문자 만 허용합니다. –

답변

13

정규식으로 해결할 수 있습니다!

mystring = "hello" 
yourstring = "bad & string" 

validRegEx = /^[^\\\/&]*$/ 

alert(mystring.match(validRegEx)) 
alert(yourstring.match(validRegEx)) 

정규 표현식과 일치하는 문자열이 정상이면 반환하거나, 유효하지 않으면 null을 반환합니다.

설명 :

  • 자바 스크립트 정규식 리터럴은 문자열과 같이 구분하지만, 슬래시 (/ 년대) 대신 따옴표 (" 년대)로되어있다.
  • validRegEx의 첫 번째 문자와 마지막 문자는 일부가 아닌 전체 문자열과 일치하도록하고 캐럿은 시작 부분에 달러 기호를 붙입니다.
  • 대괄호 ([]) 사이의 부분은 클래스에있는 한 모든 문자와 일치하는 문자 클래스입니다. 그 안에있는 첫 번째 문자 인 캐럿은 문자 클래스에 언급되지 않은 문자와 일치하도록 클래스가 무효화되었음을 의미합니다. 생략 된 경우 클래스는 지정된 문자와 일치합니다. ,
    • 다음 두 시퀀스 , \\\/은 그 자체로 백 슬래시는 뭔가 다른 이스케이프 시퀀스 것이기 때문에 백 슬래시 이스케이프, 그리고 슬래시는 정규식의 끝에 도달했다고 생각으로 파서를 혼동 것 (정확히 문자열에서 따옴표를 이스케이프 처리하는 것과 유사 함).
    • 앰퍼샌드 (&)는 특별한 의미가 없으며 이스케이프 처리되지 않았습니다.
  • 나머지 문자는 149) 클린의 별 (Kleene star (*)는 문자 클래스 앞으로 백 슬래시하거나 또는하지 않은 많은 문자를 먹을 수 있도록이, 0 번 이상 일치해야 덧붙일 어떤 것을 의미한다 앰퍼샌드. 아무 것도 찾지 못하면 아무 것도 포함하지 않습니다. 일치하는 문자열이 공백이 아닌지 확인하려면 플러스 (+)로 바꿀 수 있습니다.
+0

음 ... JavaScript regex에는'match' 함수가 없으며'test'만이 예외입니다. –

+0

@LawrenceDol :'.match()'는'RegExp'가 아니라'String'에 사용됩니다. 당신이 그것을 시도 할 때 어떻게됩니까? – SingleNegationElimination

+0

@Singe : 좋아, 그 미묘한 부분을 놓쳤다. 여기 정규식 관점에서 솔루션을 찾고 왔어. 감사. –

5

정규 표현식을 사용합니다.

Mozillla.org의 this guide을 참조하십시오. 이 article은 자바 스크립트에서 정규 표현식에 대한 좋은 소개를 제공합니다.

3

Here은 자바 스크립트 유효성 검사에서 좋은 기사입니다. 서버 측에서 유효성을 검사해야 함을 기억하십시오. Javascript 유효성 검사는 쉽게 피할 수 있으므로 SQL 주입 또는 XSS 공격을 방지하는 것과 같은 보안상의 이유로 절대 사용해서는 안됩니다.

1

당신은 정규 표현식으로, 시험 방법을 사용할 수 있습니다

function validString(input){ 
    return !(/[\\/&;]/.test(input)); 
} 

validString('test;') //false 
1

당신 정규 표현식을 배울 수, 또는 (한 번에 하나 개의 문자를 확인하면 아마 간단하게) 당신이 수를 문자의 목록을 누른 다음 sanitize 어떤 종류의 문자열에서 각 하나를 제거하는 기능. 그럼

var myString = "An /invalid &string;"; 
var charList = ['/', '\\', '&', ';']; // etc... 

function sanitize(input, list) { 
    for (char in list) { 
     input = input.replace(char, ''); 
    } 
    return input 
} 

:

sanitize(myString, charList) // returns "An invalid string" 
0

다른 사람이 당신이 정규 표현식으로이 문제를 해결뿐만 아니라 값의 서버 측을 확인하는 기억 대답 것처럼. 사용자가 JavaScript를 활성화했다고 보장 할 수는 없습니다. 절대 사용자 입력을 신뢰하지 마십시오!