VB.NET如何检查String是否包含字母字符和。?

时间:2012-02-14 14:25:21

标签: regex vb.net string

使用visual basic,我有一个字符串。想要检查字符串是否包含单个大写字母字符,后跟句点。试图使用包含如下所示:

someString.Contains(“[A-Z]。”)但是这并没有归还我想要的东西。

还需要检查单个数字后跟一个句点。

如何在Visual Basic中执行此操作

11 个答案:

答案 0 :(得分:10)

使用此功能:

Function CheckForAlphaCharacters(ByVal StringToCheck As String)


    For i = 0 To StringToCheck.Length - 1
        If Char.IsLetter(StringToCheck.Chars(i)) Then
            Return True
        End If
    Next

    Return False

End Function

用法

    Dim Mystring As String = "abc123"
    If CheckForAlphaCharacters(Mystring) Then
        'do stuff here if it contains letters
    Else
        'do stuff here if it doesn't contain letters
    End If

答案 1 :(得分:10)

在评价最高的答案中,逻辑略微偏离。该函数仅验证第一个字符,然后返回true。这是调整整个字符串中字母字符的调整:

'Validates a string of alpha characters
Function CheckForAlphaCharacters(ByVal StringToCheck As String)
    For i = 0 To StringToCheck.Length - 1
        If Not Char.IsLetter(StringToCheck.Chars(i)) Then
            Return False
        End If
    Next

    Return True 'Return true if all elements are characters
End Function

答案 2 :(得分:5)

我相信我还有另一种方法可以检查字符串中是否有字母,如果这就是你要检查的内容。说你有一个随机的字符串。示例“12312H231”字符串与此相同,因为如果您使用string.tolower = string.toupper,则其中包含一个字母“12312h231”。如果它有一个字母则为false,如果只有数字则为true。

if string1.toupper = string1.tolower then
'string1 is a number
else
'string1 contains a letter
end if

答案 3 :(得分:2)

我有一个简单的解决方案。但解决方案并不优雅。您可以先创建字符串,即从“A.”,“B。”,直到“Z。”。

因此,假设MyString变量包含您要测试的字符串。然后,您可以使用“A”测试MyString。 String使用String.IndexOf方法。如果返回值是非负的则为“A”。存在于MyString中。继续“B”,“C”。直到“Z.”。您可以对整数重复相同的方式,即“0”,“1”。直到“9”。

答案 4 :(得分:1)

你可以创建一个正则表达式来测试这个(或者google用于执行你需要的正则表达式。然后调用regex.match

Regex.Match(inputString, "regex") 

答案 5 :(得分:1)

一种解决方案是使用正则表达式。您可以检查以下正则表达式以匹配字母表。和?

([A-Z]|.|\?)

我没有测试过上述内容。

答案 6 :(得分:1)

我在查看名字时添加了空格检查。如果字符串中有空格,则不会返回false。

    'Validates a string of alpha characters
    Function CheckForAlphaCharacters(ByVal StringToCheck As String)
        For i = 0 To StringToCheck.Length - 1
            If Not Char.IsLetter(StringToCheck.Chars(i)) Then
                If Not Char.IsWhiteSpace(StringToCheck.Chars(i)) Then
                    Return False
                End If
            End If
        Next

        Return True 'Return true if all elements are characters

结束功能

答案 7 :(得分:1)

显然我不能在这里投票或评论。但是,RegEx答案是迄今为止针对此问题的最简单和最佳解决方案。例如,如果您需要测试字符串是否为数字或alpa或字母数字或混合,无论如何,此解决方案都可以完成任务。

测试字符串是否为数字使用"[0-9]*" 仅限Alpha所有大写"[A-Z]*" 仅限Alpha,允许混合大小写:"[A-Z][a-z]*" 两个数字,一个大写字母,然后是六个小写字母,后跟一个数字,即' 3'或者' 7':"[0-9]{2}[A-Z][a-z]{6}[3,7]"

例如,此语句测试字符串是以两个字母开头还是以7位结尾:(来自SSRS)

System.Text.RegularExpressions.Regex.ismatch(Fields!YourStringToTest.Value,"[A-Z][a-z]{2}[0-9]{7}")

答案 8 :(得分:1)

仅供参考,在VBA中,我们需要使用Lcase作为Lower字符,使用Ucase作为上部字符

If Lcase(String1) = Ucase(String2) then
Msgbox " Numbers"

Else
Msgbox " Alphabets"

End if

答案 9 :(得分:-1)

这是一个古老的问题,但人们仍然想知道。这很容易。仅传递一个字符很重要。该函数将告诉它是否为字母数字并返回布尔值答案。

如果字符与AlphaNumericValidator变量中的字符匹配,则它是字母数字。没有循环。很基本。

    Public Function Is_AlphaNumeric(Text As String) As Boolean
    Dim AlphaNumericValidator As String = "ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz1234567890"
    Dim b_Result As Boolean

    If InStr(AlphaNumericValidator, Text) > 0 Then
        b_Result = True
    Else
        b_Result = False
    End If

    Return b_Result

End Function

答案 10 :(得分:-1)

我发现发现这个问题写得很清楚,即使没有进行充分研究,却令人沮丧,它没有删除个答案,但是没有一个答案实际上准确地回答了问题,甚至没有接受的答案。

问题在这里:

  

检查字符串是否包含单个大写字母字符,后跟一个句点。 …   还需要检查一个数字,后跟一个句点。

最接近的是this answer,但是有两个缺陷:首先,出于某种原因,它包括对"?"字符的验证,即使问题并非要求这样做,但存在更多问题,与大多数其他答案一样,它错误地假定输入严格在ASCII范围内,即使对于带重音符号的拉丁字符,也没关系,不要介意其他脚本中的字符。

接受的答案以及其他两个答案验证输入中的所有个字符是否为字母,这不是要求的字符,然后也无法检查大写字母,即问题问。

我无法解释的是,即使没有一个正确答案,也可能发布了这么多不正确的答案。但是,我打算对此进行纠正。

然后有五种解决问题的方法(下面的代码)…


前两个假设使用大写Unicode 字母,以及任何Unicode digit ,要求紧随其后的字符必须是大写字母。 "."字符,并且满足这些条件的任何长度的字符串都符合条件。请注意,几种不同的脚本中都有“十进制数字”,例如阿拉伯文-印度文,德文加里文,孟加拉文等。类似地,来自世界各地的脚本也具有大写和小写的思想,包括非拉丁文的脚本,例如西里尔字母,希腊语等。

一个适当本地化的解决方案应考虑到所有这些因素,并且无论程序使用哪种语言(以及脚本),都可以正常工作。

在前两种解决方案中,有一种扫描字符串并显式检查每个字符,而另一种则使用正则表达式执行检查。前者也许更容易理解,但是恕我直言,正则表达式更具表现力,实际上并不那么复杂。

所有这些,有时您确实确实希望将程序行为限制为仅支持拉丁脚本。因此,我提供了第三到第五种解决方案。第三个就像第一个解决方案一样,但是只允许大写字母和数字的拉丁字符。第四种和第五种是两种不同的基于正则表达式的方法:第四种更易于编写,但是需要明确说明拉丁字符的字符值范围;第五个使用Unicode字符块名称,并让Regex类找出实际的字符值。

第五个更加冗长,但在这种情况下,我发现它更具表现力,因为您可以说出为什么选择了这些特定的字符块范围。更改限制也容易得多。例如,如果您只需要基本的拉丁字符集,而没有重音字符,横排字符等,则可以只包含"IsBasicLatin"值。

请注意,这两个基于正则表达式的解决方案都需要使用“零宽度预读”来执行本质上的“与”比较。即先行先验证字符是否在正确的字符范围内,然后正则表达式的主要部分然后实际检查大写或数字。

此代码示例还包括示例数据和测试每个实现的简单辅助方法。请注意,在示例数据中,第二个和第三个字符串实例看似具有大写拉丁字母A,但实际上具有大写西里尔字母А。因此,当根据拉丁字符要求进行测试时,它将失败,而针对支持所有脚本的全球化友好实现进行测试时,它将通过。

样本数据还包括一个带印度数字١的字符串。同样,这将通过全球化友好测试,但未通过仅拉丁语版本。

希望这会有所帮助!

Imports System.Text
Imports System.Text.RegularExpressions

Module Module1

    Sub Main()
        Console.OutputEncoding = Encoding.UTF8

        Dim values As String() = {"A.", "0.", "aZ.foo", "b9.bar", "É.", "А.", "А!", "e.", "a١.foo", "b0,bar", "é."}

        TestValidateWithValues(values, AddressOf ValidateString)
        TestValidateWithValues(values, AddressOf ValidateStringRegex)
        TestValidateWithValues(values, AddressOf ValidateLatinString)
        TestValidateWithValues(values, AddressOf ValidateLatinStringShortRegex)
        TestValidateWithValues(values, AddressOf ValidateLatinStringVerboseRegex)
    End Sub

    Function ValidateString(text As String) As Boolean
        If text.Length < 2 Then Return False

        For i As Integer = 0 To text.Length - 2
            Dim ch As Char = text(i)

            If (Char.IsLetter(ch) And Char.IsUpper(ch) Or Char.IsDigit(ch)) And text(i + 1) = "."c Then Return True
        Next i

        Return False
    End Function

    Function ValidateStringRegex(text As String) As Boolean
        Return Regex.IsMatch(text, "(?:\p{Lu}|\p{Nd})\.")
    End Function

    Function ValidateLatinString(text As String) As Boolean
        If text.Length < 2 Then Return False

        For i As Integer = 0 To text.Length - 2
            Dim ch As Char = text(i)

            If (IsLatinChar(ch) And Char.IsUpper(ch) Or
                IsLatinDecimalDigit(ch)) And
                text(i + 1) = "."c Then Return True
        Next i

        Return False
    End Function

    Function IsLatinChar(ch As Char) As Boolean
        Return ch >= ChrW(0) And ch <= "ʯ"c ' IsBasicLatin, IsLatin-1Supplement, IsLatinExtended-A, IsLatinExtended-B, IsIPAExtensions
    End Function

    Function IsLatinDecimalDigit(ch As Char) As Boolean
        Return ch >= "0"c And ch <= "9"c
    End Function

    Function ValidateLatinStringShortRegex(text As String) As Boolean
        Return Regex.IsMatch(text, "(?=[\u0000-ʯ])(?:\p{Lu}|\p{Nd})\.")
    End Function

    Function ValidateLatinStringVerboseRegex(text As String) As Boolean
        Return Regex.IsMatch(text, "(?=[\p{IsBasicLatin}\p{IsLatin-1Supplement}\p{IsLatinExtended-A}\p{IsLatinExtended-B}\p{IsIPAExtensions}])(?:\p{Lu}|\p{Nd})\.")
    End Function

    Sub TestValidateWithValues(values As String(), validator As Func(Of String, Boolean))
        Console.WriteLine($"Testing method {validator.Method.Name}:")
        For Each value In values
            Console.WriteLine($"Text: {value}, Result: {validator(value)}")
        Next
        Console.WriteLine()
    End Sub

End Module

p.s。如果您不想看到字符替换字形而不是{{1}的实际字符,则需要将控制台窗口字体设置为支持所有测试字符的字符,例如“ Courier New”。 }。