你如何确定Char是否是A-Z的来信?

时间:2008-12-22 15:21:25

标签: vb.net

如何确定字母是否在A-Z或数字0-9的范围内?我们收到了一些损坏的数据“I_999Š=ÄÖÆaðøñòòñ”。

我以为我可以使用Char.IsLetterOrDigit(“Š”)来识别来自“I_999Š”的损坏数据,但是这意外地返回true。我需要陷入这种想法吗?

8 个答案:

答案 0 :(得分:12)

我不禁注意到每个人似乎都错过了真正的问题:您的数据“损坏”似乎是一个明显的字符编码问题。因此,无论您对数据做什么,您都会(错误地)处理症状并忽略根本原因。

具体而言,您似乎试图将收到的二进制BYTES解释为ASCII文本,而这些BYTES几乎肯定是为了表示编码为ASCII以外的其他文本。

您应该找出哪些字符编码适用于您收到的文本字符串。然后,您应该在应用适当的字符编码转换时读取该数据。

你应该阅读Joel Spolsky的文章,强调"There Ain't No Such Thing As Plain Text."

答案 1 :(得分:5)

有两种快速选择。第一种是使用正则表达式,第二种是使用Asc()函数来确定Ascii值是否在这些允许字符的范围内。我个人会使用Asc()来实现这个目标。

答案 2 :(得分:2)

应该是:

if (Regex.IsMatch(input, "[A-Za-z0-9]"))
{
    // do you thang
}

答案 3 :(得分:1)

For Each m As Match In Regex.Matches("I_999Š=ÄÖÆaðøñòòñ", "[^A-Z0-9]")
    '' Found a bad character
Next

For Each c As Char In "I_999Š=ÄÖÆaðøñòòñ"
    If Not (c >= "A"c AndAlso c <= "Z"c OrElse c >= "0"c AndAlso c <= "9"c) Then
        '' Found a bad character
    End If
Next

修改

说出来,我会解决它。我注意到我遗漏了一个“然后”(现在修复),但我打算将其作为伪代码。

答案 4 :(得分:1)

您可以使用正则表达式过滤掉不良字符...(如果您只需要检测它,请使用Regex.IsMatch)

str = Regex.Replace(str, "[^A-Za-z0-9]","", RegexOptions.None);

答案 5 :(得分:1)

确保处理可打印ASCII字符的唯一方法是,无论程序中的编码,甚至是相关字符串中的编码,都要检查每个字符的合法值是否介于32和126之间(127 =删除 - 实际上并不是一个可打印的角色。

Public Module StringExtensions
<Extension()>

Public Function IsASCII(inString As String, Optional bPrintableOnly As Boolean = True) ' 127 = Delete (non-printing) < 32 = control characters also, non-printing

Dim lowerLimit As Int32 = If(bPrintableOnly, 32, 0)
Dim upperLimit As Int32 = If(bPrintableOnly, 127, 128)

For Each ch In inString.ToCharArray()
  If Not Asc(ch) < upperLimit OrElse Asc(ch) < lowerLimit Then
    Return False
  End If
Next

Return True

End Function
End Module

答案 6 :(得分:0)

使用Asc(char)函数。它返回0到255之间的ANSI字符代码。检查ANSI Character Codes Chart

答案 7 :(得分:0)

请尝试以下代码:

NOT isNumeric(char)