2009-07-20 20 views
1

Ich habe diesen Code:Validierung, Javascript

<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd"> 
<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en"> 
<head> 
<title>sss</title> 
<meta http-equiv="content-type" content="text/html; charset=utf-8" /> 


<script type='text/javascript'> 
function isAlphabet(obj){ 

    var alphaExp = /[^a-z0-9_-]+/; 
    if(!obj.value.match(alphaExp)){ 
     return true; 
    } 
    else{ 
     alert('the bad symbols'); 
     obj.focus(); 
     return false; 
    } 
} 
</script> 

</head> 
<body> 

    <form action="/"> 
     <input type='text' id='letters' onblur="isAlphabet(this)"/> 
    </form> 

</body> 
</html> 

Und ich will ein Alert() zeigt nur die Zeichen zeigen, für die Überprüfung fehlschlägt.

Zum Beispiel:

Wenn ein Eingangssymbol wie „#abc“ enthält, sollte die Warnmeldung zeigt nur „#“. Wie kann das gemacht werden?

Antwort

2

Hier ist eine einfache Möglichkeit, es zu tun ... es ist nicht die effizienteste aber:

function isAlphabet(obj) 
{ 
    var val = obj.value; 
    var alphaExp = /[^a-z0-9_-]+/; 

    var valid = true; 
    var badchars = ""; 

    for(a = 0; a < val.length; a++) 
    { 
     if(val[a].match(alphaExp)) 
     { 
      badchars += "," + val[a]; 
      valid = false; 
     } 
    } 

    if(!valid) 
    { 
     alert("The following characters are not allowed: " + badchars.substr(1)); 
     obj.focus(); 
    } 

    return valid; 
} 
+0

, die nicht im Internet Explorer älter als Version funktioniert 8. Sie haben val.charAt (a) oder val.substr (a, 1) zu verwenden, statt val [a]. – Guffa

0

Sie könnten Matching auf Regex, die alle verbotenen Symbole enthält (wie Ihre alphaExp), und dann verketten die Übereinstimmungen.

1

In diesem Fall Sie passende Zeichen, die in den gelieferten Bereiche nicht fallen. Daher können Sie den übereinstimmenden Text in eine Rückwärtsreferenz einfügen und diese verwenden.

Alternativ können Sie ein Regexp-Objekt erstellen und dessen lastMatch-Eigenschaft verwenden.

0

Wenn Sie den Modifikator g verwenden, können Sie .match() erhalten, um Ihnen ein Array von Übereinstimmungen zurückzugeben (ungültige Zeichen in Ihrem Fall), dann können Sie sie einfach anzeigen.

siehe "String.match (Muster)" etwa 1/3 unten auf dieser Seite: http://evolt.org/regexp_in_javascript

var str = "Watch out for the rock!".match(/r?or?/g) 

str enthält dann [ "o", "oder", "ro"]

2

Verwenden Ein regulärer Ausdruck, der den erlaubten Zeichen entspricht, um eine Zeichenfolge zu erhalten, in der diese entfernt werden. Wenn die Zeichenfolge alles enthält, die Validierung fehlschlägt:

function isAlphabet(obj) { 
    var alphaExp = /[a-z0-9_-]+/g; 
    var illegal = obj.value.replace(alphaExp, ''); 
    if (illegal.length){ 
     alert('Input contains the characters '+illegal+' which are not allowed.'); 
     obj.focus(); 
     return false; 
    } else { 
     return true; 
    } 
}