我正在做一个街道地址验证,在拉伸地址验证文本字段中应该允许所有字符和特殊字符。
为了允许所有特殊字符,我使用了以下方法。 是否有更好的方法允许所有特殊字符?
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
答案 0 :(得分:9)
地址验证是一个非常棘手的主题,有很多陷阱。例如,在美国,您可以轻松地使用短划线“ - ”和斜杠“/”字符。例如: 123-A Main Street 。这里“-A”通常表示公寓号码。
此外,您可以拥有街道和公寓的分数,如“4567 40 1/2 Road”,其中街道名称为“40 1/2 Road”,因此您不能排除使用斜线字符。
pound / hash“#”字符通常用作公寓级别的指示符。例如,您可以使用“#409”而不是使用Suite 409(通常写为STE 409)。
在所有这些问题中都必须提出一个更大的问题:最终目标是什么?您是否正在尝试查看地址是否是真实的?或者您想查看地址是否确实存在?
有许多第三方解决方案可用于查看地址是否真实,例如ServerObjects,Melissa Data和SmartyStreets。提供完整的Javascript集成甚至更少。 SmartyStreets提供了一个Javascript实现,您可以轻松插入您的网站。它被称为LiveAddress。
为了充分披露,我是SmartyStreets的创始人,如果您最终使用地址验证系统,我很想听听您的想法。您可以在Twitter上以jonathan_oliver的名义与我联系。
答案 1 :(得分:3)
为什么不使用正则表达式
var regex = /[,#-\/\s\!\@\$.....]/gi; // ... add all the characters you need
if (regex.test(s)) {
return true;
}
return false;
答案 2 :(得分:3)
如果你想要一个这样的功能,试试:
function validCharForStreetAddress(c) {
return ",#-/ !@$%^*(){}|[]\\".indexOf(c) >= 0;
}
答案 3 :(得分:0)
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;
}
注意:您可能希望对数组进行排序并进行二分查找。