最有效/优雅的地址验证

时间:2009-04-23 15:14:12

标签: asp.net vb.net validation google-maps

我创建了这个小型的位置类,以便我可以更好地处理我将要发送给Google Maps API的地址信息。我要做的一件事是进行一些验证,以确保地址有足够的信息来返回结果。

对于应用程序,准确度应该与单个城市一样松散(这意味着只要提供邮政编码或城市/州,它就应该有效,因为它会在Google中自动找到该区域的地理中心地图)。

所以像:

  • 地址1,地址2,城市,州,ZIP
  • 地址1,城市,州,ZIP
  • 地址1,城市,邮编
  • 地址1,ZIP
  • 城市,州

一切都有效,而像是

  • 地址1,地址2,州
  • 国家
  • 地址1
  • 地址2
  • 地址1,地址2

不会起作用,因为它会返回可能很多的结果,或者会使地理中心超出我想要的精确范围。

注意我相信我可以列出其他几十种有效且无效的组合,但我希望我提供足够的示例来正确概述“精确度范围”。

Public Class Location
    Private _Address1 As String
    Private _Address2 As String
    Private _City As String
    Private _State As String
    Private _ZIP As String

    Public Function isValid() As Boolean   
        'Insert validation code here'
    End Function

End Class

我知道你可以使用一整套If语句来检查是否存在某些内容以及是否存在其他内容,以及其他内容是否存在,等等,但我觉得这样会是一大块逻辑代码。

在我在请求中发送之前,是否有一种更有效/更优雅的方式来确保我有一个有效的位置?

2 个答案:

答案 0 :(得分:2)

就所需物品而言,您的规则实际归结为:

有效地址必须包含邮政编码或同时包含城市和州。

据我所知,满足该规则的一切都应该没问题。您的验证代码可以简单如下:

Public Function isValid() As Boolean   
    If (String.IsNullOrEmpty(city) or String.IsNullOrEmpty(state)) And _
        String.IsNullOrEmpty(zip) Then

        Return False
    Else
        Return True
    End If
End Function

显然,您可能还想检查字段中的值是否符合预期(正确的ZIP长度,有效状态等)。

顺便说一下,您可能要考虑从IsValid检查中返回多于布尔值的内容。如果结果有效,则一个简单的true就足够了,但通常使用错误的返回值,你想知道为什么它是无效的。我经常这样做:

Class ValidationResult
    Public Property IsValid as Boolean
    Public Property Errors as IEnumerable<String>
End Class

答案 1 :(得分:1)

所述标准不会归结为此:

Public Function isValid() As Boolean   
    Return _
        Not String.IsNullOrEmpty(_ZIP) _
        Or Not (String.IsNullOrEmpty(_City) Or String.IsNullOrEmpty(_State))
End Function