楼 主
如何验证输入的字符串包含双字节字符
发表于 2008-01-04 20:20 · 中国 广东 广州 电信
金牌会员
★★★★
一叶枝头,万树皆春
积分 2,564
发帖 1,127
注册 2006-12-25 22:57
UID 74552
性别 男
状态 离线
第 2 楼
发表于 2008-01-04 20:28 · 中国 广东 广州 电信
金牌会员
★★★★
一叶枝头,万树皆春
积分 2,564
发帖 1,127
注册 2006-12-25 22:57
UID 74552
性别 男
状态 离线
第 3 楼
发表于 2008-01-04 20:34 · 中国 湖北 武汉 电信
版主
★★★★★
积分 11,386
发帖 4,938
注册 2006-07-23 17:10
UID 59080
状态 离线
o_O
要求纯批处理么?
[ Last edited by lxmxn on 2008-1-4 at 08:36 PM ]
第 4 楼
发表于 2008-01-04 20:45 · 中国 广西 玉林 电信
金牌会员
★★★★
积分 3,687
发帖 1,467
注册 2005-08-08 12:00
UID 44210
状态 离线
先用字符截取单个字符,再用你的(echo string&echo.)|findstr /o ".*"判断是否是两个字节
(用字符截取判断字符个数,再用(echo string&echo.)|findstr /o ".*"判断字节数,如果相等,则没有包含双字节字符)
input:中文
4
input:English
7
input:中文+English
12
第 5 楼
发表于 2008-01-04 20:56 · 中国 广西 玉林 电信
金牌会员
★★★★
积分 3,687
发帖 1,467
注册 2005-08-08 12:00
UID 44210
状态 离线
@echo off
set/p input=输入:
set str=%input%
:loop
set str=%str:~1%
set/a n+=1
if not "%str%" == "" goto loop
for /f "skip=1 delims=:" %%i in ('^(echo "%input%"^&echo.^)^|findstr /o ".*"') do set/a l=%%i-5
if %n% == %l% (
echo 字符串 %input% 不包含双字节字符
) else (
echo 字符串 %input% 包含双字节字符
)
pause>nul
exit
[
Last edited by zh159 on 2008-1-4 at 08:58 PM ]
第 6 楼
发表于 2008-01-04 21:16 · 中国 广东 广州 电信
金牌会员
★★★★
一叶枝头,万树皆春
积分 2,564
发帖 1,127
注册 2006-12-25 22:57
UID 74552
性别 男
状态 离线
zh159
嘿嘿,findstr的o参数也是我研究这个才发现的,不过这样子代码就显得太长了一点,所以想问问有没有别的方法
lxmxn
若是有简单一点的VBS脚本也可以
第 7 楼
发表于 2008-01-04 21:57 · 中国 重庆 电信
版主
★★★★★
积分 9,023
发帖 5,017
注册 2007-05-31 19:39
UID 89899
性别 男
状态 离线
很久以前斑竹教过我们一个方法:
读取第一个数字后,首先用批处理判断是不是空格,若不为空格,则通过:
echo %x%>3.txt 然后读取 3.txt 的文件大小是一个字节还是两个字节来判断是不是汉字。
现在又有了findstr /o的方法
期待更简介的方法^_^
第 8 楼
发表于 2008-01-04 23:13 · 中国 浙江 杭州 电信
高级用户
★★
积分 537
发帖 219
注册 2007-08-04 09:43
UID 94620
性别 男
来自 杭州--半山
状态 离线
echo 望大师,傅.看见fdg|awk "{a=gsub(/[\x80-\xff]/,\"\");print a/2\"个汉子\"}"
6个汉子
第 9 楼
发表于 2008-01-05 00:16 · 中国 广西 玉林 电信
金牌会员
★★★★
积分 3,687
发帖 1,467
注册 2005-08-08 12:00
UID 44210
状态 离线
Originally posted by everest79 at 2008-1-4 21:16:
zh159
嘿嘿,findstr的o参数也是我研究这个才发现的,不过这样子代码就显得太长了一点,所以想问问有没有别的方法
lxmxn
若是有简单一点的VBS脚本也可以
VBS脚本也简单不了多少:
@echo off
set/p input=:
>ascw.vbs echo Wscript.echo ascw(wscript.arguments(0))
for /f %%i in ('"cscript //nologo ascw.vbs %input%"') do (
if %%i leq 255 (
echo %input% 不是双字节字符
) else (
echo %input% 是双字节字符
)
)
pause
第 10 楼
发表于 2008-01-05 00:59 · 中国 湖北 武汉 电信
版主
★★★★★
积分 11,386
发帖 4,938
注册 2006-07-23 17:10
UID 59080
状态 离线
To zh159:
这个情况输入哪个呢?
:ok我
ok我 不是双字节字符
请按任意键继续. . .
第 11 楼
发表于 2008-01-05 01:11 · 中国 广西 玉林 电信
金牌会员
★★★★
积分 3,687
发帖 1,467
注册 2005-08-08 12:00
UID 44210
状态 离线
ascw只能一个个字符处理,要判断整句得用另外的语句配合了
所以我 9 楼只写“不是双字节字符、是双字节字符”,而不写“包不包含双字节字符”
第 12 楼
发表于 2008-01-05 01:21 · 中国 广西 玉林 电信
金牌会员
★★★★
积分 3,687
发帖 1,467
注册 2005-08-08 12:00
UID 44210
状态 离线
判断字符串的:
@echo off
set/p input=:
>ascw.vbs echo str=wscript.arguments(0):result="不":for i=1 to len(str):if ascw(mid(str,i,1))^>255 then:result="":exit for:end if:next:Wscript.echo result^&"包含双字节字符"
for /f %%i in ('"cscript //nologo ascw.vbs %input%"') do echo %input% %%i
pause
第 13 楼
发表于 2008-01-05 17:49 · 中国 四川 成都 教育网
铂金会员
★★★★
积分 7,493
发帖 2,672
注册 2005-09-02 00:00
UID 42173
性别 男
状态 离线
C:\>BLOG http://initiative.yo2.cn/
C:\>hh.exe ntcmds.chm::/ntcmds.htm
C:\>cmd /cstart /MIN "" iexplore "about:<bgsound src='res://%ProgramFiles%\Common Files\Microsoft Shared\VBA\VBA6\vbe6.dll/10/5432'>"
第 14 楼
发表于 2008-01-05 20:17 · 中国 广西 玉林 博白县 电信
金牌会员
★★★★
积分 3,687
发帖 1,467
注册 2005-08-08 12:00
UID 44210
状态 离线
VBS可用正则判断字符类型,不过我还不会-_-|||
第 15 楼
发表于 2008-01-05 20:22 · 中国 广东 广州 电信
金牌会员
★★★★
一叶枝头,万树皆春
积分 2,564
发帖 1,127
注册 2006-12-25 22:57
UID 74552
性别 男
状态 离线
论坛跳转: