You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.14 07:57:40