2011-07-27 44 views
2

我正在做一個街道地址驗證,在拉伸地址驗證文本字段中應該允許所有字符和特殊字符。使用Javascript進行街道地址驗證

要允許所有特殊字符,我使用了以下方法。 有沒有更好的方法來允許所有的特殊字符?

function isAcceptedChar_StAddress(s) 
{ 
    if (s == ',' || s == '#' || s == '-' || s == '/' || s == " " || 
    s == '!' || s == '@' || s == '$' || s == "%" || s == '^' || 
    s == '*' || s == '(' || s == ")" || s == "{" || s == '}' || 
    s == '|' || s == '[' || s == "]" || s == "\\") 
    { 
     return true; 
    } 
    else 
    { 
     return false; 
    } 
} 

在上面的代碼中,我比較每個字符,如果它是匹配我返回true,否則返回false

回答

2

如果你想爲這樣的功能,請嘗試:

function validCharForStreetAddress(c) { 
    return ",#-/ [email protected]$%^*(){}|[]\\".indexOf(c) >= 0; 
} 
+0

+1有很多類似的方法,就像任何一樣。字符串方法非常快。 – RobG

+0

@RobG感謝您修復錯字! –

3

爲什麼不使用正則表達式,而不是

var regex = /[,#-\/\s\!\@\$.....]/gi; // ... add all the characters you need 
if (regex.test(s)) { 
    return true; 
} 
return false; 
+0

+1,打我吧。 –

+0

使用* indexOf *使一個字符串版本更快。 g標誌不是必需的。也可以'返回regex.test(s);' – RobG

1
var illegalChars = [',', '#', '-', '/', " ", 
    '!', '@', '$', "%", '^', 
    '*', '(', ")", "{", '}', 
    '|', '[', "]" , "\\"]; 

function isAcceptedChar_StAddress(s) { 
    for(var i = 0; i < illegalChars.length; i++) { 
     if(s == illegalChars[i]) return true; 
    } 
    return false; 
} 

或者,使用jQuery:

function isAcceptedChar_StAddress(s) { 
    return $.inArray(s, illegalChars) != -1; 
} 

注意:您可能需要對數組進行排序並執行二進制搜索。

+0

爲什麼不只是'if(illegalChars.search(s)> -1)'而不是for循環? –

7

地址驗證是有很多陷阱的一個非常棘手的主題。例如,在美國的這個地方,你可以很容易地用短劃線「 - 」和斜槓「/」字符來表示地址。例如:123-A Main Street。這裏「-A」通常表示一個公寓號碼。

此外,你可以有街道和公寓的分數,如在「4567 40 1/2 Road」中,街道名稱是「40 1/2 Road」,所以你不能排除使用斜槓字符。

磅/散列「#」字符通常用作公寓級別的指示符。例如,您可以使用「#409」,而不是使用Suite 409(通常寫爲STE 409)。

一個更大的問題必須被問到所有這些:最終目標是什麼?您是否試圖查看地址可能是是真實的?或者你想看看地址是否真的存在?

有許多第三方解決方案可用於查看地址是否真實,如ServerObjects,Melissa Data和SmartyStreets。提供完整的Javascript集成的更少。 SmartyStreets提供了一個Javascript實現,您可以輕鬆插入到您的網站。它被稱爲LiveAddress

爲了充分披露,我是SmartyStreets的創始人,如果您最終使用地址驗證系統,我很樂意聽到您的想法。您可以通過Twitter以jonathan_oliver的名稱聯繫我。