注册 登录
编程论坛 VFP论坛

有关字符判断代码

aqyejun 发布于 2021-12-28 08:20, 1799 次点击
共享一个字符判断代码,有时可能会用到!
*取整数
*Ceil(Month(date())/3)
clear
accept "请输入字符:" to a
do case
case ISLOWER(a)
?"该字符是小写字母。"
case ISUPPER(a)
?"该字符是大写字母。"
case ISDIGIT(a)
?"该字符是数字。"
OTHERWISE
?"该字符是其他特殊符号。"
endcase


clear
accept "请输入字符:" to a
if asc(a)>=48 and asc(a)<=57
?"该字符是数字。"
else
if asc(a)>=97 and asc(a)<=122
?"该字符是小写字母。"
else
if asc(a)>=65 and asc(a)<=90
?"该字符是大写字母。"
else
?"该字符是其他特殊符号。"
endif
endif
endif

CLEAR
LOCAL a as String
Accept "请输入一个字符串" To a
For i = 1 To Len(a)
    b=Substr(a,i,1)
    Do Case
    Case Isdigit(b)=.T.
        ?a+"的第"+ Transform(i)+"位是数字"
    Case Isalpha(b)=.T.
        ?a+"的第"+ Transform(i)+"位是字母"
    Case ISLOWER(b)=.T.
        ?a+"的第"+ Transform(i)+"位是小写字母"
    Case ISUPPER(b)=.T.
        ?a+"的第"+ Transform(i)+"位是大写字母"
    Otherwise
        ?a+"的第"+ Transform(i)+"位是数字字母外的字符"
    Endcase
Endfor
9 回复
#2
cssnet2021-12-28 17:11
印象中,一切中文字符,用ISUPPER()、Isalpha()来判断,总能得到.t.
ISLOWER()则返回.f.
不知这是鬼佬的哪门子逻辑?
——不知有没记错。
#3
sdta2021-12-28 20:33
判断一个字符是否为中文字符,ISLEADBYTE( )最合适。
#4
cssnet2021-12-28 21:09
以下是引用sdta在2021-12-28 20:33:31的发言:
判断一个字符是否为中文字符,ISLEADBYTE( )最合适。


万一中文字符是Unicode LE、Unicode BE或UTF-8之类,ISLEADBYTE()一样死翘翘!
#5
sdta2021-12-28 23:03
Unicode LE、Unicode BE或UTF-8之类,是中文字符吗
#6
cssnet2021-12-28 23:31
以下是引用sdta在2021-12-28 23:03:58的发言:
Unicode LE、Unicode BE或UTF-8之类,是中文字符吗


乍一看,很震惊!
先生何出此言?

* *****************************
* Unicode LE、Unicode BE或UTF-8之类,是中文字符吗
* 为什么不是?!
* *****************************
cGB2312 = "中"
cUnicode = STRCONV(cGB2312, 5)
cUTF8 = STRCONV(cGB2312, 9)
* 你双击打开下边这3个TXT看一看,为什么你会觉得它们不是中文字符?!
* 注:unicode只弄了小尾,大尾的话,对调一下高低字节序即可。
strtofile(cGB2312, "GB2312.txt")
strtofile(cUnicode, "Unicode.txt")
strtofile(cUTF8, "UTF8.txt")
#7
aqyejun2021-12-29 08:58
*应用到密码设置大小写数字和字母方案
*判断字符含字母数字
*程序设计:独叶为舟
*时间:201910
mm=allt(thisform.Text1.text)
if len(mm)<8
    messagebox("密码设置必须为8位以上数字及大小写字母组合!",0+48,"错误")
    return
else
    mm1=0
    mm2=0
    mm3=0
    mm4=0
    for i = 1 to len(mm)
        b=substr(mm,i,1)
        do case
            case isdigit(b)=.t.
                *?a+"的第"+ transform(i)+"位是数字"
            *Case Isalpha(b)=.T.
                *?a+"的第"+ Transform(i)+"位是字母"
                mm1=mm1+1
            case islower(b)=.t.
                *?a+"的第"+ transform(i)+"位是小写字母"
                mm2=mm2+1
            case isupper(b)=.t.
                *?a+"的第"+ transform(i)+"位是大写字母"
                mm3=mm3+1
            otherwise
                *?a+"的第"+ transform(i)+"位是数字字母外的字符"
                mm4=mm4+1
        endcase
    endfor
    do case
        case mm1<1
            messagebox("密码设置不规范:没有0-9数字!",0+48,"错误")
            return
        case mm2<1
            messagebox("密码设置不规范:没有a-z小写字母!",0+48,"错误")
            return
        case mm3<1
            messagebox("密码设置不规范:没有A-Z大写字母!",0+48,"错误")
            return
        case mm4>0
            messagebox("密码设置不规范:有其他非法字符!",0+48,"错误")
            return
        otherwise
            *return 1
    endcase
    *if mm1>=1 and mm2>=1 and mm3>=1 and mm4=0
    *messagebox("密码设置成功!",0+48,"成功")
    *else
    *messagebox("密码设置不规范!",0+48,"错误")
    *return 1
    *endif
endif
*判断字符结束

[此贴子已经被作者于2021-12-29 08:59编辑过]

#8
吹水佬2021-12-29 18:51
程序代码:
mm=allt(thisform.Text1.text)
if len(mm)<8
    messagebox("密码设置必须为8位以上数字及大小写字母组合!",0+48,"错误")
    RETURN .f.
ENDIF
nn = CHRTRAN(mm,"0123456789","")
IF nn==mm
    messagebox("密码设置不规范:没有0-9数字!",0+48,"错误")
    return .f.
ENDIF
mm = CHRTRAN(nn,"abcdefghijklmnopqrstuvwxyz","")
IF nn==mm
    messagebox("密码设置不规范:没有a-z小写字母!",0+48,"错误")
    RETURN .f.
ENDIF
nn = CHRTRAN(mm,"ABCDEFGHIJKLMNOPQRSTUVWXYZ","")
IF nn==mm
    messagebox("密码设置不规范:没有有A-Z大写字母!",0+48,"错误")
    RETURN .f.
ENDIF
IF !EMPTY(nn)
    messagebox("密码设置不规范:有其他非法字符!",0+48,"错误")
    return .f.
ENDIF
RETURN .t.
#9
schtg2021-12-30 06:11
学习啦,谢谢!
#10
吹水佬2021-12-30 11:43
以下是引用cssnet在2021-12-28 21:09:03的发言:



万一中文字符是Unicode LE、Unicode BE或UTF-8之类,ISLEADBYTE()一样死翘翘!

ISLEADBYTE()只取串第一个字节,也就是不考虑是什么“字”
ISLEADBYTE()对字符 0~~128和255 返回.F.,129~~254 返回.T.
1