2011-07-23 61 views
0

我一直在嘗試使用JavaScript驗證表單的內容。我需要檢查'姓名'字段是否只包含字符和空格。如果有其他角色出現,我想顯示警報。這在C和Java中很容易實現,但我似乎無法在JavaScript中找到好的替代品。我讀過正則表達式,但沒有更簡單的選擇,有點像內置函數?isalpha替換爲JavaScript?

+0

「只有字符和空格」是什麼意思? – Gumbo

+0

空格是字符,文本輸入不能包含除字符以外的任何內容。我認爲你需要改寫。 – Quentin

+0

對不起,我的意思是字母:) – forkexec

回答

4

使用正則表達式當然更容易爲:

//Check for non-alphabetic characters and space 
if(name.search(/[^A-Za-z\s]/) != -1) 
    alert("Invalid name"); 

使用for循環:

//charCodeAt() gets the char code in a string 
//Upper and lower bounds for upper case characters 
var upperBoundUpper = "A".charCodeAt(0); 
var lowerBoundUpper = "Z".charCodeAt(0); 
//Upper and lower bounds for lower case characters 
var upperBoundLower = "a".charCodeAt(0); 
var lowerBoundLower = "z".charCodeAt(0); 

for (var i = 0; i < name.length; i++) { 
    var char = name.charCodeAt(i); 
    if (char <= upperBoundUpper && char >= lowerBoundUpper) 
    continue; 
    else if (char <= upperBoundLower && char >= lowerBoundLower) 
    continue; 
    //Check for space 
    else if (name[i] == " ") 
    continue; 
    else{ //Not recognized character - not valid 
    alert("Invalid name"); 
    break; 
    } 
} 

jsPerf測試相對速度:http://jsperf.com/checking-is-alphabetic
在我的測試中,for循環運行速度更快。

+0

感謝您的回答。這正是我所期待的。正則表達式的版本肯定比較短,但我現在更熟悉使用ASCII字符來檢查內容。但我會在正則表達式上加以說明:) – forkexec

+0

速度測試的有趣結果。我認爲有時正則表達式只是因爲它們的黑色藝術氣氛才被使用,儘管假設一行代碼的執行速度快於十是自然的。 – Leo

+0

不等於isAlpha(),因爲它未通過土耳其測試。 http://www.moserware.com/2008/02/does-your-code-pass-turkey-test.html – oligofren

4

不,我不知道。

雖然可以使用

/^[ a-z]+$/i.test(string) 

不像isalpha模仿最基本的isalpha的功能,這不是語言環境感知,僅適用於簡單和拉丁字母,就等於迫使isalpha運行在C區域設置中。

+0

我認爲這樣會工作,但我認爲會有某種更簡單方式(ASCII轉換和for循環,也許?)。我是javascript的noob,我還沒有學習如何將文本轉換爲他們的ASCII表示 – forkexec

+0

我不認爲空間被認爲是alpha。 –