注册 登录
编程论坛 VFP论坛

字符串处理

weiyisc 发布于 2023-08-05 08:32, 1506 次点击
我只想保留一段字符串的中英文和数字。其它去掉。用什么函数?
11 回复
#2
zhousr2023-08-05 09:38
MyFll函数:
FTrim(cStr,nMode|cChar)
删除除指定字符以外的字符。此函数类似LTrim() RTrim() AllTrim(),但区别是只保留指定的字符,而不是删除指定字符
返回值:
删除后的字符
参数:
•    cStr:字符型,待处理的字符串
•    nMode:数值型,1-只保留数字,2-只保留小写字母,3-只保留大写字母,4-只保留大小写字母,5只保留大小写字母和数字
cChar:字符型,限定字符串中允许出现的字母
示例代码
Set Library To myfll
cStr="abc123-DEF..99测试"
?FTrim(cStr,1)  &&只有数字 12399
?FTrim(cStr,2)  &&只有小写字母 abc
?FTrim(cStr,3)  &&只有大写字母 DEF
?FTrim(cStr,4)  &&只有大小写字母 abcDEF
?FTrim(cStr,5)  &&只有数字和字母 abc123DEF99
?FTrim(cStr,"1234567890ABCDEF") &&只保留限定的字符    123DEF99
Set Library To
#3
weiyisc2023-08-05 10:36
以下是引用zhousr在2023-8-5 09:38:29的发言:

MyFll函数:
FTrim(cStr,nMode|cChar)
删除除指定字符以外的字符。此函数类似LTrim() RTrim() AllTrim(),但区别是只保留指定的字符,而不是删除指定字符
返回值:
删除后的字符
参数:
•    cStr:字符型,待处理的字符串
•    nMode:数值型,1-只保留数字,2-只保留小写字母,3-只保留大写字母,4-只保留大小写字母,5只保留大小写字母和数字
cChar:字符型,限定字符串中允许出现的字母
示例代码
Set Library To myfll
cStr="abc123-DEF..99测试"
?FTrim(cStr,1)  &&只有数字 12399
?FTrim(cStr,2)  &&只有小写字母 abc
?FTrim(cStr,3)  &&只有大写字母 DEF
?FTrim(cStr,4)  &&只有大小写字母 abcDEF
?FTrim(cStr,5)  &&只有数字和字母 abc123DEF99
?FTrim(cStr,"1234567890ABCDEF") &&只保留限定的字符    123DEF99
Set Library To

汉字怎么保留???
#4
吹水佬2023-08-05 11:02
数字字母:  CHRTRAN(str,CHRTRAN(str,chs,""),"")
chs = "1234567890AaBbCcDdEdFfGgHhIiJjKkLlMmNnOoPpQqRrSsTtUuVvWwXxYyZz"
#5
吹水佬2023-08-05 11:26
str = "abc123-DEF..99测试"
ch1 = "1234567890AaBbCcDdEdFfGgHhIiJjKkLlMmNnOoPpQqRrSsTtUuVvWwXxYyZz"
ch2  = 0h000102030405060708090A0B0C0D0E0F101112131415161718191A1B1C1D1E1F202122232425262728292A2B2C2D2E2F3A3B3C3D3E3F405B5C5D5E5F607B7C7D7E7F
? "数字字母:",CHRTRAN(str,CHRTRAN(str,ch1,""),"")
? "符号:",CHRTRAN(str,CHRTRAN(str,ch2,""),"")
? "汉字:",CHRTRAN(str,ch1+ch2,"")
#6
sdta2023-08-06 00:30
全角字符都是中文吗
#7
weiyisc2023-08-06 08:04
回复 6楼 sdta
想保留的就是 英文大小写 中文 其它所有符号去掉。
#8
weiyisc2023-08-06 09:09
程序代码:

CLEAR

?regReplace('/[^\u4e00-\u9fa5a-zA-Z0-9]+/g',"今天aassss上午    上了_@#QQ一个课程,收---%^&获颇丰!123",'**')

** 正则表达式替换字符串
**
** 参数1:正则表达式
** 参数2:替换字符串
** 参数3:匹配替换新字符

FUNCTION regReplace
PARAMETERS para1,para2,para3
IF EMPTY(para1) .OR. EMPTY(para2)
RETURN ''
ENDIF

LOCAL retustr as String
retustr=''

TRY
** JS定义
TEXT TO lcJs TEXTMERGE PRETEXT 1+2 NOSHOW
function regReplace(inputStr){
    var regExp = <<para1>>; // 匹配非中文、非字母、非数字的字符
    return inputStr.replace(regExp,'<<para3>>');
}
ENDTEXT
STRTOFILE(lcJs,"c:\js.txt")
oJs=Createobject("ScriptControl")
oJs.Language="JavaScript"
oJs.AddCode(lcJs)
retustr=oJs.run("regReplace",para2)

CATCH TO err
RETURN para1
FINALLY
IF VARTYPE(oJs)='O'
RELEASE oJs
ENDIF
ENDTRY

RETURN retustr


最后这样干了,请大家多指点
#9
吹水佬2023-08-06 10:36
可以按需要编码分类替换
只有本站会员才能查看附件,请 登录

程序代码:

str = "abc123-DEF..99测试"
ch1 = "1234567890"
ch2 = "ABCDEFGHIJKLMNOPQRSTUVWXYZ"
ch3 = "abcdefghijklmnopqrstuvwxyz"
ch4  = 0h000102030405060708090A0B0C0D0E0F101112131415161718191A1B1C1D1E1F202122232425262728292A2B2C2D2E2F3A3B3C3D3E3F405B5C5D5E5F607B7C7D7E7F
? "只有数字:",CHRTRAN(str,CHRTRAN(str,ch1,""),"")
? "只有字母:",CHRTRAN(str,CHRTRAN(str,ch2+ch3,""),"")
? "大写字母:",CHRTRAN(str,CHRTRAN(str,ch2,""),"")
? "小写字母:",CHRTRAN(str,CHRTRAN(str,ch3,""),"")
? "数字字母:",CHRTRAN(str,CHRTRAN(str,ch1+ch2+ch3,""),"")
? "汉字编码:",CHRTRAN(str,ch1+ch2+ch3+ch4,"")
? "符号编码:",CHRTRAN(str,CHRTRAN(str,ch4,""),"")
? "非符号码:",CHRTRAN(str,ch4,"")
? "字母汉字:",CHRTRAN(str,ch1+ch4,"")

#10
sdta2023-08-06 18:20
以下是引用weiyisc在2023-8-6 08:04:53的发言:

想保留的就是 英文大小写 中文 其它所有符号去掉。

 A,、算中文吗
#11
shschy2023-08-07 13:47
请问ch4 = 0h0001......这句是哪种类型字符?
版主,前三句理解,第4句没理解,请详细说明一下。谢谢!
找出数字字符      ch1 = "1234567890"
找出大写字母字符  ch2 = "ABCDEFGHIJKLMNOPQRSTUVWXYZ"
找出小写字母字符  ch3 = "abcdefghijklmnopqrstuvwxyz"
请问ch4  = 0h0001......这句是哪种类型字符?
以下是引用吹水佬在2023-8-6 10:36:13的发言:

可以按需要编码分类替换


str = "abc123-DEF..99测试"
ch1 = "1234567890"
ch2 = "ABCDEFGHIJKLMNOPQRSTUVWXYZ"
ch3 = "abcdefghijklmnopqrstuvwxyz"
ch4  = 0h000102030405060708090A0B0C0D0E0F101112131415161718191A1B1C1D1E1F202122232425262728292A2B2C2D2E2F3A3B3C3D3E3F405B5C5D5E5F607B7C7D7E7F
? "只有数字:",CHRTRAN(str,CHRTRAN(str,ch1,""),"")
? "只有字母:",CHRTRAN(str,CHRTRAN(str,ch2+ch3,""),"")
? "大写字母:",CHRTRAN(str,CHRTRAN(str,ch2,""),"")
? "小写字母:",CHRTRAN(str,CHRTRAN(str,ch3,""),"")
? "数字字母:",CHRTRAN(str,CHRTRAN(str,ch1+ch2+ch3,""),"")
? "汉字编码:",CHRTRAN(str,ch1+ch2+ch3+ch4,"")
? "符号编码:",CHRTRAN(str,CHRTRAN(str,ch4,""),"")
? "非符号码:",CHRTRAN(str,ch4,"")
? "字母汉字:",CHRTRAN(str,ch1+ch4,"")

#12
吹水佬2023-08-07 14:29
以下是引用shschy在2023-8-7 13:47:19的发言:

版主,前三句理解,第4句没理解,请详细说明一下。谢谢!
找出数字字符      ch1 = "1234567890"
找出大写字母字符  ch2 = "ABCDEFGHIJKLMNOPQRSTUVWXYZ"
找出小写字母字符  ch3 = "abcdefghijklmnopqrstuvwxyz"
请问ch4  = 0h0001......这句是哪种类型字符?

这个是从ASCII编码角度来看,分:
标准ASCII码(7位:0x00~0x7F),其中:ch1(0x30~0x39)、ch2(0x41~0x5A)、ch3(0x61~0x7A),其他剩下的是ch4
扩展ASCII码(8位:0x80~0xFF),汉字库编码也用这区域(16位),所以中文系统用不了英文的扩展字符。
1