Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/react-native/7.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Regex 验证块未正确验证Enterprise Library 5.0中的属性_Regex_Vb.net_Validation_Enterprise Library_Enterprise Library 5 - Fatal编程技术网

Regex 验证块未正确验证Enterprise Library 5.0中的属性

Regex 验证块未正确验证Enterprise Library 5.0中的属性,regex,vb.net,validation,enterprise-library,enterprise-library-5,Regex,Vb.net,Validation,Enterprise Library,Enterprise Library 5,我已经使用企业库配置控制台正确配置了验证块 我的app.config文件如下所示(我仅在此处显示验证部分): 请注意: RemoteIPAddress是一个IPv4地址,因此我构建了以下常规 要检查它的表达式: \(25[0-5]| 2[0-4][0-9][0-9]|[01]|[0-9][0-9]|[01]|[0-5][0-9][0-9][0-9]|[01]|[0-4][0-9]|[01]|[0-9][0-9]|(25[0-5]| 2[0-4][0-4][0-9]|[01]|[0-9]|[0-

我已经使用企业库配置控制台正确配置了验证块

我的app.config文件如下所示(我仅在此处显示验证部分):

请注意:

  • RemoteIPAddress是一个IPv4地址,因此我构建了以下常规 要检查它的表达式:

    \(25[0-5]| 2[0-4][0-9][0-9]|[01]|[0-9][0-9]|[01]|[0-5][0-9][0-9][0-9]|[01]|[0-4][0-9]|[01]|[0-9][0-9]|(25[0-5]| 2[0-4][0-4][0-9]|[01]|[0-9]|[0-9]|[0-9]|[0-9]|0]

  • RemotePort是包含范围为0-65535的端口的属性

  • 区域性是包含语言区域性名称的属性,因此我构建正则表达式:

    ^[A-Za-z]{1,8}(-A-Za-z0-9]{1,8})*$

现在,当我的应用程序启动时,我初始化设置类,如下所示:

    Private Sub InitSettings()

        Settings.RemoteIPAddress = My.Settings.RemoteIPAddress
        Settings.RemotePort = My.Settings.RemotePort
        Settings.Culture = My.Settings.Culture

    End Sub
然后,我使用以下验证代码验证“settings”类中的设置:

Public Sub Main()

    ' Initialize application settings
    Me.InitSettings()

    ' Validate current application settings
    results = Validation.Validate(New Settings)
    If results.IsValid Then
        ' Initiate Background worker thread
        Me.DoTask()
    End If

End Sub
我在验证方面有两个问题:

  • 验证返回true(results.IsValid=true),但RemoteIPAddress属性包含空字符串。如果RemoteIPAddress不使用正则表达式,为什么验证返回true?它是一个空字符串,因此应该返回false而不是true。注意:我已经从控制台配置了正则表达式验证器,其否定属性设置为默认值:false

  • 结果对象包含以下信息:

    • 计数的值为0
    • IsValid的值为true
    • validationResults的值计数为0
    • 扩展“结果”不会产生结果

  • 似乎没有正确应用验证,那么我做错了什么?

    我发现属性不能标记为共享。如果是这样,企业库验证块将不起作用。所以从共享属性中删除它似乎是可行的。为什么?验证应用程序块仅验证实例变量(属性、字段)。如果您想验证共享/静态变量,那么可以查看自验证,或者修改块以验证共享变量。或者,如果您更改设计,使设置类成为带有实例变量的单例类,那么它将与块一起工作。我发现属性不能标记为共享。如果是这样,企业库验证块将不起作用。所以从共享属性中删除它似乎是可行的。为什么?验证应用程序块仅验证实例变量(属性、字段)。如果您想验证共享/静态变量,那么可以查看自验证,或者修改块以验证共享变量。或者,如果您更改设计,使设置类成为带有实例变量的单例类,那么它将与块一起工作。
        Private Sub InitSettings()
    
            Settings.RemoteIPAddress = My.Settings.RemoteIPAddress
            Settings.RemotePort = My.Settings.RemotePort
            Settings.Culture = My.Settings.Culture
    
        End Sub
    
    Public Sub Main()
    
        ' Initialize application settings
        Me.InitSettings()
    
        ' Validate current application settings
        results = Validation.Validate(New Settings)
        If results.IsValid Then
            ' Initiate Background worker thread
            Me.DoTask()
        End If
    
    End Sub