2014-04-20 3 views
2

자바 스크립트 함수를 작성하여 사용자 입력을 삭제하고 원치 않는 위험한 문자를 제거하고 싶습니다.자바 스크립트로 입력을 살균하는 더 좋은 방법이 있습니까?

그것만 허용해야 다음 문자 :

  • Alfanumeric 문자 (케이스 insentitive) : A-Z] [0-9].
  • "word1 word2"와 같은 내부 공백.
  • 스페인어 문자 (insentitive) : [ééíúúñü].
  • 밑줄과 하이픈 [_-].
  • 점과 쉼표 [.,].
  • 마지막으로 문자열을 trim()으로 트림해야합니다.

    function sanitizeString(str){ 
    str = str.replace(/[^a-z0-9áéíóúñü_-\s\.,]/gim,""); 
    return str.trim(); 
    } 
    

    하지만 그랬다면 :

내 첫 번째 시도였다

sanitizeString("word1\nword2") 

는 반환

"word1 
word2" 

그래서 내가 명시 적으로 제거하는 기능을 재 작성했다 \ t \ n \ f \ r \ v \ 0 :

function sanitizeString(str){ 
str = str.replace(/([^a-z0-9áéíóúñü_-\s\.,]|[\t\n\f\r\v\0])/gim,""); 
return str.trim(); 
} 

내가 알고 싶습니다 :

  1. 자바 스크립트로 입력을 살균 수있는 더 나은 방법이 있나요?
  2. 왜 \ n과 \ t가 첫 번째 버전의 RegExp에서 일치하지 않습니까?
+4

시간을 절약하고 서버에서 처리 할 필요가 없습니다. Javascript 필터링은 바이 패스하기가 너무 쉽습니다. – andrew

+0

사실 저는 백엔드에서 XPages를 사용하고 있기 때문에 실제로 SSJS가있는 서버에서이 작업을 수행하고 있습니다. Node.js를 사용하고 있다면 똑같이 말할 수 있습니다. :) –

+3

'\ s'을 사용하여 새 줄, 탭 등을 허용하고 있습니다. 공백 만 허용하려는 경우 대신 정규식에서 공백을 사용하십시오. – RobG

답변

1

sanitizeString 기능의 새로운 버전 (@RobG는 답변으로 의견을 작성하고 내가 그것을 받아 들일 것입니다) : 가장 큰 문제는 @RobG 및 @Derek 언급했다

function sanitizeString(str){ 
    str = str.replace(/[^a-z0-9áéíóúñü \.,_-]/gim,""); 
    return str.trim(); 
} 

\의 지금 w3Schools says

는 공백 문자를 찾을 내용 의미하지 않는다

,

그것은 MDN says

은 공백, 탭, 폼 공급, 줄 바꿈을 포함하여 하나의 공백 문자를 일치 무엇을 의미합니다. \ f \ n \ r \ t \ v \ u00a0 \ u1680 \ u180e \ u2000 \ u2001 \ u2003 \ u2003 \ u2003 \ u2006 \ u2007 \ u2009 \ u2009 \ u2009 \ u200a와 동등합니다. \ u2029 \ u202f \ u205f \ u3000]을 클릭하십시오.

나는이 기능을 쓸 때 w3Schools를 신뢰할 수있었습니다.

두 번째 변경 사항은 대시 기호 (-)를 끝으로 이동하여 범위 구분 기호의 의미를 피하는 것이 었습니다.

  • 참고 1 : 이것은 자바 스크립트를 사용한 서버 측 유효성 검사입니다.
  • 참고 2 : (IBM Notes XPagers 용) XPages SSJS에서 javascript를 매우 좋아합니다. 이것은 Java 방식보다 나를 위해 더 간단합니다 입니다.