可以根據(jù)字符的ASCII編碼來(lái)進(jìn)行判斷,ASCII的編碼值為:0-127,可以把0-127以外的編碼的字符作為漢字。
創(chuàng)新互聯(lián)是一家專(zhuān)業(yè)提供澤普企業(yè)網(wǎng)站建設(shè),專(zhuān)注與成都做網(wǎng)站、網(wǎng)站建設(shè)、外貿(mào)營(yíng)銷(xiāo)網(wǎng)站建設(shè)、H5網(wǎng)站設(shè)計(jì)、小程序制作等業(yè)務(wù)。10年已為澤普眾多企業(yè)、政府機(jī)構(gòu)等服務(wù)。創(chuàng)新互聯(lián)專(zhuān)業(yè)的建站公司優(yōu)惠進(jìn)行中。
Dim?a?As?String
Dim?S?As?Integer????'保存漢字的開(kāi)始位置
Dim?E?As?Integer????'保存漢字的結(jié)束位置
Dim?i?As?Integer
Dim?b?As?String
S?=?0
E?=?0
a?=?"4651讓各位serg6546.,serg6546"
For?i?=?1?To?Len(a)
If?Asc(Mid(a,?i,?1))?=?0?And?Asc(Mid(a,?i,?1))?=?127?Then
'這個(gè)是非漢字字符
If?S?=?0?Then
'還沒(méi)有找到漢字的開(kāi)始位置
'不做任何處理
Else
'已經(jīng)找到漢字的開(kāi)始位置
'那么現(xiàn)在這個(gè)是漢字的結(jié)束位置
'保存漢字的結(jié)束位置,然后結(jié)束循環(huán)
E?=?i?-?1
Exit?For
End?If
Else
'這個(gè)是漢字字符
'如果還沒(méi)有保存漢字開(kāi)始位置,
'那么這個(gè)就是漢字的開(kāi)始位置,保存下來(lái)
If?S?=?0?Then
S?=?i
End?If
End?If
Next?i
'現(xiàn)在知道了S中是漢字的開(kāi)始位置,
'E中是漢字的結(jié)束位置
'現(xiàn)在把原來(lái)的字符串分成三段,然后加上雙引號(hào)
b?=?Left(a,?S?-?1)??""""??Mid(a,?S,?E?-?S?+?1)??""""??Mid(a,?E?+?1)
'看看結(jié)果
MsgBox?b
你可以用mid截取單個(gè)字符并用ASCII碼判斷:
n=asc(mid(str1,i,1))
if n0 and n255 then
'英文字母
else
'中文
end if
整個(gè)字符串你可以循環(huán)判斷。
這是一個(gè)比較粗糙的范圍,更加精準(zhǔn)的判斷:33-126為可打印的(即可顯示的)英文字符,97-122為英文字母(小寫(xiě)),你可以根據(jù)字符串的實(shí)際內(nèi)容來(lái)采用判斷依據(jù);負(fù)數(shù)是漢字(其實(shí)是最高位為1,VB識(shí)別為負(fù)數(shù),轉(zhuǎn)換成16進(jìn)制就可以看到正確的編碼了)
用循環(huán)加MID函數(shù),取出每一個(gè)字符,看它的ASCII碼,0的是漢字,0的是非漢字。
Function isLetter(letter As String) As String
If Asc(letter) 0 Then
’Ascii碼小于0的為漢字區(qū),但其中有的是全角字符而不完全是漢字,需要進(jìn)一步區(qū)分
gbascii = AscB(StrConv(letter, vbFromUnicode))
'MsgBox gbascii
'區(qū)位碼在16區(qū)之后的為漢字[16區(qū)以前的 是全角字符]
If gbascii - 160 15 Then
isLetter = "是漢字"
Else
isLetter = "是全角符號(hào)"
End If
Else
isLetter = "是半角英文或數(shù)字"
End If
End Function
.................張志晨:我想這個(gè)比較簡(jiǎn)單,符合你的意愿。
str = "hello,everybody. " 返回false,位置0。(不含漢字和漢語(yǔ)標(biāo)點(diǎn)符號(hào))
str = "hello,ererybody。 " 返回false,位置16。(最后一個(gè)句號(hào)是漢語(yǔ)標(biāo)點(diǎn)符號(hào))
先謝過(guò)大家了!
0ascii255
我來(lái)補(bǔ)充一下代碼吧,在form中加入一個(gè)Text1
Private Sub Text1_Change()
If Text1.Text = "" Then Exit Sub '如果是空字符串,就退出此過(guò)程
Dim a
a = Asc(Mid(Text1.Text, Len(Text1.Text), 1))
If a 255 Or a 0 Then MsgBox "剛才輸入的是漢字" Else MsgBox "剛輸入的是字符"
End Sub
這是靠ASCII碼來(lái)判斷的,你根據(jù)你的程序需要進(jìn)行修改吧,這是對(duì)輸入框約束輸入的比較常用的方法之一,你可以去搜索一下英文字符ASCII碼表.