代码之家  ›  专栏  ›  技术社区  ›  TheTXI

最有效/最优雅的地址验证

  •  1
  • TheTXI  · 技术社区  · 17 年前

    我做了这个小的位置类,这样我就可以更好地处理地址信息,我将在请求中发送到谷歌地图API。我还有一件事要做,那就是验证一下地址是否有足够的信息返回结果。

    对于该应用程序,准确度水平应与单个城市一样宽松(这意味着只要提供邮政编码或城市/州,它就可以工作,因为它将在谷歌地图中自动找到该区域的地理中心)。

    所以像:

    • 地址1,地址2,城市,州,邮政编码
    • 地址1,城市,州,邮政编码
    • 地址1,城市,邮政编码
    • 地址1
    • 城市,国家

    应该都能工作,而像

    • 地址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 回复  |  直到 17 年前
        1
  •  2
  •   Ryan Brunner    17 年前

    就所需项目而言,您的规则实际上可以归结为:

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

    据我所知,所有符合这条规则的东西都应该是好的。验证代码可以简单到:

    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就足够了,但通常使用您想要知道的false返回值。 为什么? 它无效。我通常做如下的事情:

    Class ValidationResult
        Public Property IsValid as Boolean
        Public Property Errors as IEnumerable<String>
    End Class
    
        2
  •  1
  •   LukeH    17 年前

    所述标准是否可以归结为:

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