26
2019.2
字符串函数
作者: POPASP
POP_MVC.String的字符串处理函数,主要有五大类:比较、排序、修改、查找、其他
## 比较函数
比较函数有 Equal、iEqual、cmp、casecmp、ncmp、ncasecmp、natcmp、casenatcmp。比较函数在网站制作中被广泛使用,另外它还应用在了数组类POPASP_STRING与处理Dictionary对象的POPASP_DICTIONARY类中。
### Equal函数
**功能**
判断两字符串是否相同
**参数说明**
Function Equal( ByVal str1,ByVal str2 )
str1 参数,比较字符串一
str2 参数,比较字符串二
**返回值**
二者相同,返回True,不同返回False
**举例**
```brush:vb
dim a,b,bool
a = "popjb.com"
b = "www.popjb.com"
bool = POP_MVC.String.Equal(a,b) ' False
```
### iEqual函数
**功能**
判断两字符串是否相同,忽略大小写
**参数说明**
Function iEqual( ByVal str1,ByVal str2 )
str1 参数,比较字符串一
str2 参数,比较字符串二
**返回值**
两字符串在忽略大小写下,相同返回True,不同返回False
**举例**
```brush:vb
dim a,b,bool
a = "popasp.com"
b = "POPASP.com"
bool = POP_MVC.String.iEqual(a,b) ' True
```
### cmp函数
**功能**
二进制安全比较字符串大小
**参数说明**
function cmp( ByRef str1,ByRef str2 )
str1 参数,比较字符串一
str2 参数,比较字符串二
**返回值**
str1 大于 str2 返回正整数,等于返回0,小于返回负整数
**举例**
```brush:vb
dim a,b,ret
a = "abc"
b = "def"
ret = POP_MVC.String.cmp(a,b) ' -1
```
### casecmp函数
**功能**
二进制安全比较字符串大小,忽略大小写
**参数说明**
function casecmp( ByRef str1,ByRef str2 )
str1 参数,比较字符串一
str2 参数,比较字符串二
**返回值**
如果 str1 小于 str2,返回负数;如果 str1 大于 str2,返回正数;二者相等则返回 0。
**举例**
```brush:vb
dim a,b,ret
a = "abc"
b = "ABC"
ret = POP_MVC.String.casecmp(a,b) ' 0
```
### ncmp函数
**功能**
二进制安全比较字符串开头的若干个字符
**参数说明**
function ncmp( ByRef str1,ByRef str2,ByRef length)
str1 参数,比较字符串一
str2 参数,比较字符串二
length 参数,最大比较长度
**返回值**
如果 str1 小于 str2,返回负数;如果 str1 大于 str2,返回正数;二者相等则返回 0。
**举例**
```brush:vb
dim a,b,ret
a = "abcdef"
b = "abc"
ret = POP_MVC.String.ncmp(a,b,3) ' 0
```
### ncasecmp函数
**功能**
二进制安全比较字符串开头的若干个字符,忽略大小写
**参数说明**
function ncasecmp( ByRef str1,ByRef str2 )
str1 参数,比较字符串一
str2 参数,比较字符串二
length 参数,最大比较长度
**返回值**
str1 大于 str2 返回正整数,等于返回0,小于返回负整数
**举例**
```brush:vb
dim a,b,ret
a = "POPASP_CONTROL"
b = "popasp"
ret = POP_MVC.String.ncasecmp(a,b,len(b) ) ' 0
```
### natcmp函数
**功能**
使用自然排序算法比较字符串
**参数说明**
function natcmp(ByVal left,ByVal right)
left 参数,比较字符串一
right 参数,比较字符串二
**返回值**
left 大于 right 返回正整数,等于返回0,小于返回负整数
**举例**
```brush:vb
dim a,b,ret
a = "image10.jpg"
b = "image2.jpg"
ret = POP_MVC.String.natcmp(a,b) ' 8
```
在上例中,如果使用 POP_MVC.String.cmp函数比较,得到的结果不符合人类自然,
```
ret = POP_MVC.String.cmp(a,b) ' -1
```
### casenatcmp函数
**功能**
使用自然排序算法比较字符串
**参数说明**
function casenatcmp(ByVal left,ByVal right)
left 参数,比较字符串一
right 参数,比较字符串二
**返回值**
left 大于 right 返回正整数,等于返回0,小于返回负整数
**举例**
```brush:vb
dim a,b,ret
a = "image10.jpg"
b = "IMAGE2.jpg"
ret = POP_MVC.String.casenatcmp(a,b) ' 8
```
## 排序函数
排序函数有 sort、rsort、usort
### sort函数
**功能**
将字符串中的字符按升序排列
**参数说明**
Function sort(ByRef str)
str 参数,需排序的字符串
**返回值**
原字符串保持不变,生成一个新字符串
**举例**
```brush:vb
dim a,b
a = "popasp.com"
b = POP_MVC.String.sort(a) '.acmooppps
a = "POPASP框架,是一个非常优秀的MVC框架"
b = POP_MVC.String.sort(a) 'ACMOPPPSV一个优常是架架框框的秀非,
```
### rsort函数
**功能**
将字符串中的字符按降序排列
**参数说明**
Function rsort(ByRef str)
str 参数,需排序的字符串
**返回值**
原字符串保持不变,生成一个新字符串
**举例**
```brush:vb
dim a,b
a = "popasp.com"
b = POP_MVC.String.sort(a) 'spppoomca.
a = "POPASP框架,是一个非常优秀的MVC框架"
b = POP_MVC.String.sort(a) ',非秀的框框架架是常优个一VSPPPOMCA
```
### usort函数
**功能**
按自定义函数将字符串中的字符排列
**参数说明**
Function usort( ByRef str , ByRef FuncComp)
str 参数,需排序的字符串
**注意事项**
本函数将用用户自定义的比较函数对一个字符串中的每个字符进行排序。如果要排序的字符串需要用一种不寻常的标准进行排序,那么应该使用此函数。
比较函数必须在第一个参数被认为小于,等于或大于第二个参数时分别返回一个小于,等于或大于零的整数。
**返回值**
原字符串保持不变,生成一个新字符串
**举例**
```brush:vb
function testFunc( a,b )
if isNumeric(a) and isNumeric(b) then
testFunc = b - a
else
testFunc = POP_MVC.String.cmp(a,b)
end if
End Function
dim a,b
a = "14acd4455efag28"
b = POP_MVC.String.usort(a,"testFunc") '85544421aacdefg
```
在上例中usort函数使用了自定义函数"testFunc",该函数将数字从大到小排序,而将字母从小到大排序
## 修改函数
### ltrim 、 rtrim 和 trim
**功能**
去除字符串头部、尾部或首尾处的字符(串)
**参数说明**
function [trim] (str,find)
str 参数,待处理的字符串
find 参数,要去掉的字符(串)
**返回值**
过滤后的字符串
**举例**
```brush:vb
dim a,ret
a = "trimababab"
ret = POP_MVC.String.trim(a,"ab") ' trim
a = "----字符串---"
ret = POP_MVC.String.rtrim(a,"-") ' ----字符串
ret = POP_MVC.String.ltrim(a,"-") ' 字符串---
```
### lpad 、 rpad 和 pad
**功能**
使用另一个字符串填充字符串为指定长度(左、右、两侧)
**参数说明**
function pad(ByVal input,ByRef pad_length,ByVal pad_string)
input 参数,输入字符串
pad_length 参数,填充后的长度,如果 pad_length 的值是负数,小于或者等于输入字符串的长度,不会发生任何填充
pad_string 参数,填充字符串,如果填充字符的长度不能被 pad_string 整除,那么 pad_string 可能会被缩短。
**返回值**
返回填充后的字符串
**举例**
```brush:vb
dim a,ret
a = "Alien"
ret = POP_MVC.String.lpad(a,10,"-=") ' =-=-=Alien
ret = POP_MVC.String.rpad(a,10,"-=") ' Alien-=-=-
ret = POP_MVC.String.pad(a,10,"-=") ' -=Alien-=-
```
### Reverse 函数
**功能**
反转字符串
**参数说明**
Function Reverse( ByRef str )
str 参数,输入字符串
pad_length 参数,填充后的长度,如果 pad_length 的值是负数,小于或者等于输入字符串的长度,不会发生任何填充
pad_string 参数,填充字符串,如果填充字符的长度不能被 pad_string 整除,那么 pad_string 可能会被缩短。
**返回值**
反转后的字符串
**举例**
```brush:vb
dim a,ret
a = "popasp.com"
ret = POP_MVC.String.Reverse(a) ' =-=-=Alien
ret = strReverse(a) ' Alien-=-=-
```
### Repeat 函数
**功能**
反转字符串
**参数说明**
Function Repeat( ByRef input,ByRef multiplier )
input 参数,待操作的字符串
multiplier 参数,必须大于等于 0。如果 multiplier 被设置为 0,函数返回空字符串
**返回值**
反转后的字符串
**举例**
```brush:vb
dim a,ret
a = "popasp.com"
' vbs原生函数String是将某个字符重复N遍
ret = String(2,a) ' pp
' String函数却可以重复单个的汉字
ret = String(2,"我") ' 我我
' 多个汉字仍取第一个字符
ret = String(2,"我们") ' 我我
' Repeat函数可以重复任意字符(串)
ret = POP_MVC.String.Repeat(a,2) ' popasp.compopasp.com
```
### UCFirst 函数
**功能**
将字符串的首字母转换为大写
**参数说明**
Function UCFirst(ByRef str)
str 参数,待操作的字符串
**返回值**
返回结果字符串
**举例**
```brush:vb
dim a,ret
a = "index"
' 它只处理首字母
ret = POP_MVC.String.UCFirst(a) ' Index
a = "iNdeX"
' 字符串的其他字母它并去操作
ret = String(2,"我") ' INdeX
' 多个汉字仍取第一个字符
ret = String(2,"我们") ' 我我
```
### LCFirst 函数
**功能**
将字符串的首字母转换为小写
**参数说明**
Function UCFirst(ByRef str)
str 参数,待操作的字符串
**返回值**
返回结果字符串
## 查找函数
### Exists 函数
**功能**
判断字符串是否存在另一字符串中
**参数说明**
Function Exists( input,find )
input 参数,从中查找的字符串
find 参数, 待查找的字符串
**返回值**
存在返回True,不存在返回False
**举例**
```brush:vb
dim a,ret
a = "popasp.com"
ret = POP_MVC.String.Exists(a,".") ' True
```
### StartsWith、iStartsWith 函数
**功能**
判断某字符串是否以另一字符串开头,iStartsWith还可忽略大小写
**参数说明**
Function StartsWith( ByVal input,ByVal find )
input 参数,从中查找的字符串
find 参数, 待查找的字符串
**返回值**
正确返回True,否则返回False
**举例**
```brush:vb
dim input,find,ret
input = "POPASP_TEMPLATE"
find = "POPASP"
ret = POP_MVC.String.StartsWith( input , find ) ' True
ret = POP_MVC.String.iStartsWith( input , "popasp" ) ' True
```
### EndsWith、iEndsWith 函数
**功能**
判断某字符串是否以另一字符串结尾,iEndsWith还可忽略大小写
**参数说明**
Function StartsWith( ByVal input,ByVal find )
input 参数,从中查找的字符串
find 参数, 待查找的字符串
**返回值**
正确返回True,否则返回False
**举例**
```brush:vb
dim input,find,ret
input = "POPASP_TEMPLATE"
find = "TEMPLATE"
ret = POP_MVC.String.EndsWith( input , find ) ' True
ret = POP_MVC.String.iEndsWith( input , "Template" ) ' True
```
### str 函数
**功能**
查找字符串的首次出现,返回字符串的一部分或者 Empty(如果未发现)
**参数说明**
Function str( ByRef input ,ByRef find )
input 参数,从中查找的字符串
find 参数, 待查找的字符串
**返回值**
返回字符串的一部分或者 Empty(如果未发现)
**举例**
```brush:vb
dim input,find,ret
input = "name@example.com"
find = "@"
ret = POP_MVC.String.str( input , find ) ' @example.com
```
## 其他函数
### explode 函数
**功能**
将字符串按每N(默认为1)个字符炸成一个数组
**参数说明**
Function explode( ByRef mixed )
mixed 参数,可以为字符串,也可以为数组
1、如果为字符串,则将字符串按每个字符(一个汉字算一个字符)炸成一个数组
2、如果为数组,第一元素作为字符串,
如果第二个元素为Integer类型,则将作为步长,按该步长,将字符串炸成一个数组
如果第二个元素为字符串类型,则相当于使用了vbs的原生函数split(此种情况建议采用split函数)
**返回值**
返回字符串的一部分或者 Empty(如果未发现)
**举例**
```brush:vb
dim str,ret
str = "popasp.com"
'直接传入字符串,会将字符串按每个字符分割成一个数组
ret = POP_MVC.String.Explode(str) '["p", "o", "p", "a", "s", "p", ".", "c", "o", "m"]
'如果传入正整数,则将作为步长,将字符串分割成一个数组
ret = POP_MVC.String.Explode( array("POPASP框架",6) ) '["POPASP", "框架"]
'如果将整数作为字符串传入,也当其作为步长
ret = POP_MVC.String.Explode( array("POPASP框架","6") ) '["POPASP", "框架"]
'如果要使用数字作为字符串作为分割符,可以使用split函数
ret = split( "11022033044","0" ) '["POPASP", "框架"]
'非数字字符串作为Explode函数的分割符,此时效果同split函数
ret = POP_MVC.String.Explode( array("11-22-33-44","-") ) '[11, 22, 33, 44]
```
#### md5 函数
**功能**
计算字符串的 MD5 散列值
**参数说明**
Function md5(ByRef str)
str 参数,原始字符串
**返回值**
以 32 字符十六进制数字形式返回散列值
**举例**
```brush:vb
dim str,ret
str = "apple"
ret = POP_MVC.String.md5(str) '1f3870be274f6c49b3e31a0c6728957f
```
#### Random 函数
**功能**
产生随机字串
**参数说明**
Function Random( ByRef randLen,ByRef randType )
randLen 参数,随机字符串长度
randType 参数,随机字符串类型。0 字母,1 数字,2 大写字母,3 小写字母,4 汉字,其它 大小写字母与数字混合
**返回值**
以 32 字符十六进制数字形式返回散列值
**举例**
```brush:vb
dim ret
'每次生成的字符串都不同
ret = POP_MVC.String.Random(5,4) '顿塔亚焦此
```