1

VBScript 中是否有一个函数来检查字符串是否包含有效的十六进制值?

例如:

Dim x : x = IsHexadecimal("2AF3") 'x = True

Dim y : y = IsHexadecimal("X2M3") 'y = False
4

7 回答 7

4

正如其他人已经建议的那样,您可以使用正则表达式:

Function IsHexadecimal(ByVal v)
  Set re = New RegExp
  re.Pattern = "^[a-f0-9]+$"
  re.IgnoreCase = True
  IsHexadecimal = re.Test(v)
End Function

另一个解决方案(具有更多的黑客价值):

Function IsHexadecimal(ByVal v)
  On Error Resume Next
  Dim i : i = CLng("&h" & v)
  IsHexadecimal = Not IsEmpty(i)
  On Error Goto 0
End Function
于 2013-07-18T22:40:57.940 回答
1

我意识到这是一个旧线程,但这是我的解决方案。它基于 vbscript 的内置IsNumeric函数,可以识别十六进制字符串,前提是它前面有&h

function is_hex(str_hex)
  is_hex = IsNumeric("&h" & str_hex)
end function
于 2017-11-14T12:32:00.673 回答
0

您可以使用正则表达式,如下所示:

'Prepare a regular expression object
Set myRegExp = New RegExp
myRegExp.IgnoreCase = True
myRegExp.Global = True
myRegExp.Pattern = "\A\b[0-9a-fA-F]+\b\Z"


' Pop up a message box for each match
Set myMatches = myRegExp.Execute(subjectString)
For Each myMatch in myMatches
  msgbox myMatch.Value, 0, "Found Match"
Next

检查此链接http://www.regular-expressions.info/vbscript.html

希望对你有帮助^_^

于 2013-07-18T15:26:12.800 回答
0

与 Ansgar Wiechers 的回答相同,但正则表达式必须是 af,而不是 ae。

Function IsHexadecimal(ByVal v)
  Set re = New RegExp
  re.Pattern = "^[a-f0-9]+$"
  re.IgnoreCase = True
  IsHexadecimal = re.Test(v)
End Function
于 2013-07-18T15:27:05.087 回答
0

要么编写一个实现:

For Each character In input
    IF character Is Not In "0-9A-Za-z"
       Exit with False
    End If
Next
Exit with True

或使用带有 .Pattern "[^0-9A-Za-z]" 的 RegExp.Test()。

在这两种情况下,检查输入的长度可能是一个好主意。

于 2013-07-18T15:28:23.367 回答
-1

不确定这样的函数是否内置在 vbscript 中,但你可以使用类似这样的东西来创建自己的函数:

function isHexadecimal(s as string)
  Dim i as integer, c as string, R as boolean
  R=true
  for i=1 to length(s)
    c=mid(S,i,1)
    if instr("0123456789ABCDEFabcdef", c)<=0 then R=false
  next i
  sHexadecimal=R
end function
于 2013-07-18T15:24:26.487 回答
-1

我写了一个特定的函数。

以下代码工作正常:

Function IsHexadecimal(ByVal input_string)
    Dim b : b = False   
    Dim s_length : s_length = Len(input_string)
    Dim char 
    For i = 1 To s_length
        char = Asc(Mid(input_string, i, 1))
        If (char > 47 And char < 58) Or _
            (char > 64 And char < 71) Or _
            (char > 96 And char < 103) Then
            b = True
        Else
            b = False
            Exit For
        End If
    Next
    IsHexadecimal = b
End Function
于 2013-07-18T16:34:43.210 回答