关于ISNUMERIC的问题
我用ISNUMERIC这个函数判断1,0000000000这个字符串他为什么返回true啊怎样才能实现判断一串字符全部为数字啊 --------------------编程问答-------------------- "1,0000000000"VB转化为数字时为1,可试一下,MsgBox Val("1,0000000000")为证,当然ISNUMERIC("1,0000000000")=True了. --------------------编程问答-------------------- 我觉得老张你这样用Val来打比方解释可能不对,那还有这个呢
?val("2 3dsf")
23
那个,好像是被当作分节号处理了,你看
?CInt("1,33")
133 --------------------编程问答-------------------- 格式化了的数据 --------------------编程问答--------------------
NND 我一直以为 val(字符串)一定=0呢
长知识了 --------------------编程问答--------------------
lz不妨试一下
const s="1,0000000"
if s=val(s) then msgbox "ok"
--------------------编程问答-------------------- 使用正则来判断精确的格式
添加引用:
Microsoft VBScript Regular Expressions 5.5
然后用如下代码
--------------------编程问答--------------------
Public Function IsMatch(ByVal pattern As String, ByVal test As String) As Boolean
'定义正则
Dim myRegExp As RegExp
Dim myMatches As MatchCollection
Set myRegExp = New RegExp
myRegExp.IgnoreCase = True
myRegExp.Global = True
'正则表达式
myRegExp.pattern = pattern
'匹配
IsMatch = myRegExp.test(test)
End Function
Private Sub Command3_Click()
MsgBox IsMatch("^\d+(\.\d+)?$", "1,0000000000")
End Sub
关于这点,MSDN Library上还是有明确的说明的(请注意关于逗号处理的红色部分):
Val 函数,在它不能识别为数字的第一个字符上,停止读入字符串。那些被认为是数值的一部分的符号和字符,例如美圆号与逗号,都不能被识别。但是函数可以识别进位制符号 &O(八进制)和 &H(十六进制)。空白、制表符和换行符都从参数中被去掉。
MSDN 中关于"IsNumeric 函数"的说明是很简略的,不过还好,刚才我在"高级变量主题"这里找到了相应的明确说明,估计可以深合楼主之意:
当 Visual Basic 将一个非数值的表示(如包含一个数的字符串)转换成数值时,它会使用地区设置(在 Windows 的“控制面板”中规定)来解释千位分隔符、小数点符号和货币符号。
于是,如果 Windows 的“控制面板”中的国家/地区设置值被设置成美国、加拿大或澳大利亚,则这两个语句将返回 True:
IsNumeric ("$100")
IsNumeric ("1,560.50")
而下面两个语句则返回 false:
IsNumeric ("DM100")
IsNumeric ("1.560,50")
但是,如果在 Windows 的“控制面板”中的国家/地区设置值被设置成德国,则情况正好相反:前两个语句返回 false,而后两个语句返回 true。
附注:在意大利,逗号和小数点的含义是相反的,见在"用 Visual Basic编写国际化代码"一节里的:
数值和分隔符
在美国,句号 (.) 被作为小数点。但在一些欧洲国家/地区,小数点是逗号 (,)。类似地,美国把逗号作为分隔小数点左边每三位的千分位符,而一些欧洲国家/地区使用空格实现此功能。下表列出了不同数字格式的一些例子。
国家/地区 数字格式
美国 1,234,567.89
1,234.56
.123
法国 1 234 567,89
1 234,56
0,123
意大利 1.234.567,89
1.234,56
0,123
注意 在Visual Basic 中函数 Str 和 Val 总是把句号当成小数点。但这在大多数区域中是不适用的。因此应该使用 CStr, CDbl, CSng, CInt 和 CLng 函数把其它数据类型转换为需要的数据类型。这些函数通过系统区域来决定小数点。
详细信息 关于 Print 和 Format 函数的详细信息请参阅本章后面的“区域识别函数”。关于函数“CStr 函数”,“CDbl 函数”,“CSng 函数”,“CInt 函数”,“CLng 函数”,“CDate 函数”和“CCur 函数”,请参阅《语言参考》。也可参阅“变量、常数和数据类型”。
--------------------编程问答--------------------
这个不能解决小数点的问题,你可以试一下s="1000.9"
--------------------编程问答--------------------
--------------------编程问答-------------------- IsNumeric函数判断含有分组符(逗号,)和小数点(句号.)的数字串均返回true
Private Sub Check1_Click(Index As Integer)
Dim n As String
n = "1000000000.0"
If IsNumeric(n) And InStr(n, ",") = 0 And InStr(n, ".") = 0 Then
MsgBox n & "纯数字字符中"
Else
MsgBox n & "含有非数字字符"
End If
End Sub
--------------------编程问答-------------------- 数字中间允许逗号","分隔符,属于数字格式化问题;如果不允许使用逗号格式化的数字,可以这样写If If IsNumeric("1,0000000000") And InStr("1,0000000000", ",") = 0 Then
补充:VB , 基础类