2016-10-04 4 views
0

Ich schrieb ein Formular mit einer einzigen Eingabe, die den Namen des Benutzers nur in persischer Sprache nimmt. Beim ersten Tastendruck wird das Zeichen definiert. wenn das Zeichen nicht persisch war, verhindert es, mehr zu tippen und den Fehler zu zeigen: "ändere deine Tastatursprache auf Persisch" .Es funktioniert großartig. Aber das Problem ist, selbst wenn die Tastatursprache persisch war, zeigt es den Fehler und zweitens dritten Tastendruck wird es in Ordnung sein. meine Frage ist warum der Fehler beim ersten Drücken des ersten Buchstabens angezeigt wird?Validieren Eingabefeld für spezielle Sprache

hier ist mein Code-Schnipsel:

document.getElementById('my-text').addEventListener('keypress',function(e){ 
 
    var myText = this.value; 
 
    if(!just_persian(myText)){ 
 
     $("#error-nwl").text("change your keybord language to persian"); 
 
\t \t this.style.boxShadow = "0px 0px 2px 1px #E25249"; 
 
\t \t $("#error-nwl").css('color', '#ff6666'); 
 
     this.value = myText.substring(0, myText.length - 1); 
 
\t \t 
 
    } 
 
\t else{ 
 
\t \t $("#error-nwl").text(""); 
 
\t \t this.style.boxShadow = "0px 0px 0px 0px"; \t 
 
\t \t } 
 
}); 
 
function just_persian(str){ 
 
    var p = /^[\u0600-\u06FF\uFB8A\u067E\u0686\u06AF ]+$/; 
 
    return p.test(str); 
 
}
<!doctype html> 
 
<html> 
 
<head> 
 
<meta charset="utf-8"> 
 
<title>Untitled Document</title> 
 
<script src="https://ajax.googleapis.com/ajax/libs/jquery/1.12.4/jquery.min.js"></script> 
 
</head> 
 

 
<body> 
 

 
    <div id="error-nwl"></div> 
 
    <form action="" method="post" name="myForm" class="newslside"> 
 
     <input type="text" placeholder="register-name" id="my-text"/><br/> 
 
    <input class="submitnews" type="submit" value="send"> 
 
    </form> 
 

 

 

 
    
 
</body> 
 
</html>

dank

+0

Was passiert, wenn Sie 'console.info (str)' hinzufügen? Liegt der Charakter innerhalb der erwarteten Bandbreite? Ich weiß nicht, wie persisch Eingabe ist, aber vielleicht ist der Text eine Kombination aus mehreren Codepunkten, wenn Sie also anfangen zu tippen, sind alle Codepunkte nicht da und fallen daher außerhalb des Bereichs. –

+0

nicht. Jedes Mal, wenn ich meinen ersten Buchstaben drücke, wird der Fehler angezeigt, aber der Fehler wird ausgeblendet, wenn ich den zweiten und dritten Buchstaben drücke. –

+0

Also, was zeigt es für 'console.info (str)' auf dem ersten Buchstaben? –

Antwort

0

Wenn Sie eine Tastendruck-Ereignis verwenden, das this.value leer ist, wenn Sie eine Taste zum ersten Mal drücken. Daher gibt p.test(str)false zurück.

können Sie entweder testen den gesamten Wert nach eine Taste drücken, das heißt, auf „keyup“ Ereignis oder jedes Zeichen testen getrennt von e.key auf die just_persian Funktion übergeben (dann können Sie nur eine /[\u0600-\u06FF\uFB8A\u067E\u0686\u06AF ]/ regex verwenden) .

+0

Wie kann ich jedes Zeichen separat in einer Funktion testen? –

+0

'if (/ [\ u0600- \ u06FF \ uFB8A \ u067E \ u0686 \ u06AF] /. Test (e.key)'. –