界面上面的文本框,有些要求只能输入8位半角字符的长度,有些要求只能输入5位全角字符的长度。
用len()的话好像不能区分输入的究竟是半角还是全角,谁有办法解决这个问题吗?
用len()的话好像不能区分输入的究竟是半角还是全角,谁有办法解决这个问题吗?
解决方案 »
- exec insert_tran_status '402FS548',1,20,10,'800049'怎麼解釋啊
- 我写了个小软件,运行一段时间就"未响应",请问一般是怎么回事,怎么解决?每次出现"未响应",我把它关闭重新运行就正常运行了,怎么通过代码关
- 自学编程也有两年了,对VB\VC\DELPHI\JAVA\ASP都有所了解,看一些代码也能看懂个70-80%,可是要编个东西就是无从下手,不知该如何提高?请
- 如何把上网记录读出放在表格控件上?
- 简单问题!!!在线等
- 真不知老师是怎么回事?
- C/S程序﹐server一段時間后﹐就不能連線是什么原因。
- 关于把数据库中的文本如何通过vb导到word(解决后还有重谢)
- 有没有这样的textbox控件
- delphi5从哪儿下载
- VB 鼠标移动事件
- 界面全屏大小的问题?
如:
a是全角的,asc("a")是负值
a是半角的,asc("a")是正值但是比较麻烦的是,现在要一个字符一个字符的判断文本框中输入的字符串是否均为全角或均为半角,再用len()判断长度是否为指定的长度,很麻烦啊。
或者是先用len()判断长度再去判断输入的字符串里的每个字符是否为均为全角还是均为半角,但是也比较麻烦啊。谁有些简洁的写法。
Dim gbascii As Byte
Dim intChar As Integer
If Asc(vStr) < 0 Then
gbascii = AscB(StrConv(vStr, vbFromUnicode))
'区位码在16区之后的为汉字
If gbascii - 160 > 15 Then
intChar = 0 ' "是汉字"
Else
intChar = 2 ' "是全角符号"
End If
Else
intChar = 1 ' "是半角英文或数字"
End If
WhatChar = intChar
End Function
Dim lLenUnicode As Long
Dim lLenAnsi As Long
lLenUnicode = Len(Text1)
lLenAnsi = LenB(StrConv(Text1, vbFromUnicode))
If (lLenUnicode > 8) Or (lLenUnicode <> lLenAnsi) Then
MsgBox "只能输入8位半角字符!", vbExclamation
Cancel = True
End If
End SubPrivate Sub Text2_Validate(Cancel As Boolean)
Dim lLenUnicode As Long
Dim lLenAnsi As Long
lLenUnicode = Len(Text2)
lLenAnsi = LenB(StrConv(Text2, vbFromUnicode))
If (lLenUnicode > 5) Or ((lLenUnicode * 2) <> lLenAnsi) Then
MsgBox "只能输入5位全角字符!", vbExclamation
Cancel = True
End If
End Sub
'
' キャラクターチェック
1(半角)、2(全角)、3(混在)、4(空白)、5(Null)、9(其他)'------------------------------------------------------------------------------------------------------
Function Chk_Char(p_char, p_Rc) As Integer
Dim i As Integer
Dim char_len As Integer
Dim chk_len As Integer
Dim asc_code As Integer
On Error GoTo Chk_Char_Err
Chk_Char = -1
p_Rc = -1 If IsNull(p_char) = True Then
' Null
p_Rc = 5
Chk_Char = 0
Exit Function
End If
char_len = Len(Trim(p_char))
If char_len = 0 Then
' 空白
p_Rc = 4
Chk_Char = 0
Exit Function
End If
chk_len = 0
For i = 1 To char_len
asc_code = Asc(Mid(Trim(p_char), i, 1))
If 0 <= asc_code And asc_code <= 255 Then
chk_len = chk_len + 1
Else
chk_len = chk_len + 2
End If
Next i
Select Case chk_len
Case char_len
' ASCII
p_Rc = 1
Case (char_len * 2)
' (漢字)
p_Rc = 2
Case char_len To (char_len * 2)
' 混在
p_Rc = 3
Case Else
' 其他
p_Rc = 9
End Select
Chk_Char = 0
Exit Function
Chk_Char_Err:
MsgBox Err & " " & Error & Chr(13) & Chr(10) & "ErrPlace = Chk_Char", vbOKOnly
End Function
'
' キャラクターチェック
'
' 引数:文字列、リターンコード
' 戻値:0(正常)、-1(エラー)
' リターンコード:-1(エラー)、1(半角)、2(全角)、3(混在)、4(空白)、5(Null)、9(その他)
'
'
' 作成日:2000/11/17 sakaguchi
'
'------------------------------------------------------------------------------------------------------
Function Chk_Char(p_char, p_Rc) As Integer
Dim i As Integer
Dim char_len As Integer
Dim chk_len As Integer
Dim asc_code As Integer
On Error GoTo Chk_Char_Err
Chk_Char = -1
p_Rc = -1 If IsNull(p_char) = True Then
' Null
p_Rc = 5
Chk_Char = 0
Exit Function
End If
char_len = Len(Trim(p_char))
If char_len = 0 Then
' 空白
p_Rc = 4
Chk_Char = 0
Exit Function
End If
chk_len = 0
For i = 1 To char_len
asc_code = Asc(Mid(Trim(p_char), i, 1))
If 0 <= asc_code And asc_code <= 255 Then
chk_len = chk_len + 1
Else
chk_len = chk_len + 2
End If
Next i
Select Case chk_len
Case char_len
' ASCII
p_Rc = 1
Case (char_len * 2)
' シフトJIS(漢字)
p_Rc = 2
Case char_len To (char_len * 2)
' 混在
p_Rc = 3
Case Else
' その他
p_Rc = 9
End Select
Chk_Char = 0
Exit Function
Chk_Char_Err:
MsgBox Err & " " & Error & Chr(13) & Chr(10) & "ErrPlace = Chk_Char", vbOKOnly
End Function
全角是UniCode编码,占二个字节;Len函数可以取得一个字符串所占的字数。简单的说:Len("A")=LenB("A") Len("汉")>LenB("汉")。
判断字符串是半角的还是非半角的方法就是比较LenB和Len的返回值。
如果Len=LenB,那么这个字符串是半角的。
如果2*Len=LenB,那么这个字符串是全角的。
如果Len<LenB<2*Len,那么这个字符串中既含有半角字符又含有全角字符。
2
?LenB(strconv("a",vbFromUnicode))
1
3