Delphi Rio 10.3.2如何判断字符串是否为ASCII或西里尔文?
嘿,这个需求完全可以通过Unicode字符范围来实现,而且在Delphi Rio 10.3.2里做起来相当直接!我给你梳理一下思路和具体代码:
核心思路
你提到的范围是对的:
- 可打印ASCII字符的Unicode码点范围是 $0020(空格)到$007F(波浪号)
- 基础西里尔文的Unicode码点范围是 $0400到$04FF
因为Delphi里的string默认是UnicodeString,每个Char对应UTF-16编码的BMP字符(正好覆盖你需要的这两个范围),所以直接通过字符的Ord()值就能判断所属范围。
具体实现代码
我写两个实用的函数,你可以直接用:
// 判断字符串是否仅包含可打印ASCII字符 function IsAllASCII(const S: string): Boolean; var C: Char; begin Result := True; for C in S do begin // 检查字符是否在ASCII可打印范围内 if not (Ord(C) in [$20..$7F]) then begin Result := False; Break; end; end; end; // 判断字符串的非ASCII字符是否均为西里尔文(允许混合ASCII) function IsCyrillicContent(const S: string): Boolean; var C: Char; begin Result := True; for C in S do begin // 跳过ASCII字符,检查非ASCII字符是否属于西里尔文范围 if not (Ord(C) in [$20..$7F]) and not (Ord(C) in [$0400..$04FF]) then begin Result := False; Break; end; end; end;
使用示例
你可以这样调用这两个函数来满足需求:
var InputStr: string; begin InputStr := 'Привет, мир!'; // 西里尔文示例 if IsAllASCII(InputStr) then ShowMessage('这是纯ASCII字符串') else if IsCyrillicContent(InputStr) then ShowMessage('这是包含西里尔文的字符串') else ShowMessage('既不是纯ASCII,也不是西里尔文'); end;
额外说明
- 如果你的需求是判断字符串中是否至少包含一个西里尔文字符,可以修改
IsCyrillicContent的逻辑:遍历字符串时只要找到一个西里尔文字符就返回True,否则False。 - 如果你需要覆盖更多西里尔文扩展字符(比如$0500-$052F的西里尔文补充区),只需要把范围加到判断条件里就行。
内容的提问来源于stack exchange,提问作者lorife
相关产品推荐
相关产品推荐

