使用visual basic,我有一个字符串。想要检查字符串是否包含单个大写字母字符,后跟句点。试图使用包含如下所示:
someString.Contains(“[A-Z]。”)但是这并没有归还我想要的东西。
还需要检查单个数字后跟一个句点。
如何在Visual Basic中执行此操作
答案 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”。 }。