2014-02-05 1 views
0

자바 스크립트를 처음 사용했습니다. 사용자 이름을 입력 한 다음 유효성을 검사해야합니다. 입력 한 사용자 이름은이 배열의 요소 중 하나가 아니어야합니다 : ["admin", "administrator", "demo", "user"] 등. 배열이 더 길 수 있습니다.양식에서 특정 단어의 사용을 거부하는 방법은 무엇입니까?

지금까지 작성했지만 배열의 첫 번째 요소에만 적용됩니다.

function arrayValidation() { 
    nonoUser = ["username", "admin", "administrator", "demo"]; 
    valueOfInput = document.getElementById("user").value; // "user" here is id of input 
    for (var i = 0; i < nonoUser.length; i++) { 
     if (valueOfInput == nonoUser[i]) { 
      alert("you cant use this username"); 
     }else { 
      return; 
     } 
    } 
} 
+3

JavaScript로 처리 하시겠습니까? 그것은 클라이언트 측 언어입니다, 아무도 소스를 볼 수 있습니다 .. –

+0

만약 입력이 첫 번째 입력과 같지 않으면 반환 할 곳에 다른 곳으로 갈 것입니다. 그래서 else 블록을 제거하십시오. –

+0

@Mathijs Flietstra는 정확합니다. 최소한 이것을 서버 측에서 검증하고 자바 스크립트 유효성 검사를 좋은 것으로 추가해야합니다. 이것에 대한 자바 스크립트 유효성 검사에 의존하는 것은 재앙이 될 수 있습니다! –

답변

2

이 시도 :

function arrayValidation() { 
    nonoUser = ["username", "admin", "administrator", "demo"]; 
    valueOfInput = document.getElementById("user").value; // "user" here is id of input 
    var isValid = true; 
    for (var i = 0; i < nonoUser.length && isValid; i++) { 
     if (valueOfInput == nonoUser[i]) { 
      isValid = false; 
     } 
    } 
    if (isValid) { 
     // Username is valid 
    }else{ 
     // Username is invalid 
    } 
} 

그러나 서버로 전송있어 결코 신뢰 데이터
그것은 사용자로 JS를 변경하는 사소한 (서버 측뿐만 아니라 유효성을 검사)해야한다.

+0

이 또한 작동합니다. –

+0

은 완벽하게 작동합니다. 감사 – user3222552

0

return false를 추가해야합니다. else 문이 아닌 경고가 포함 된 코드 섹션으로 이동합니다.

1

이 올바른 방향을 가리켜 야 :

document.getElementById("user").onkeyup = function(){ 
    var nonoUser = ["username", "admin", "administrator", "demo"]; 
    nonoUser.indexOf(this.value) === -1 ? false : this.value = ''; 
} 

데모 : http://jsfiddle.net/Le2xC/

나는 또한 당신이 그렇지 않으면 사용자가 여전히 사용할 수 있습니다뿐만 아니라,이 서버 측의 유효성을 검사하고 희망 당신의 "nono"사용자 이름.

// Your original code: 

function arrayValidation() { 
    nonoUser = ["username", "admin", "administrator", "demo"]; 
    valueOfInput = document.getElementById("user").value; // "user" here is id of input 
    for (var i = 0; i < nonoUser.length; i++) { 
     if (valueOfInput == nonoUser[i]) { 
      alert("you cant use this username"); 
     } else { 

      // Using return here is the problem. 
      // This else block will run if a valid username was entered. 
      // The return statement stops execution of the function, thus ending the loop. 
      // So if the loop passes the test the first time, this return 
      // statement will stop the loop and function from completing 
      // the checks against the other keywords. 

      return; 
     } 
    } 
} 

이 수정 코드가 예상대로 작동하는 것입니다 :

function arrayValidation() { 
    nonoUser = ["username", "admin", "administrator", "demo"]; 
    valueOfInput = document.getElementById("user").value; // "user" here is id of input 
    for (var i = 0; i < nonoUser.length; i++) { 
     if (valueOfInput == nonoUser[i]) { 
      alert("you cant use this username"); 

      // We can end the function check return here. 
      // There's no point checking the others, as we've found an invalid one. 

      return false; // Return a meaningful result 
     } 

     // No need for an else statement either. 

    } 
} 

으로 많은

0

여기에 코멘트하는 것은 코드가 예상대로 작동하지 않는 이유를 당신을 도움이 될 것입니다 클라이언트 쪽 유효성 검사는 선택 사항으로, 서버 쪽 유효성 검사는 필수적으로 고려해야한다고 지적했습니다.

관련 문제