首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
您现在的位置: 程式碼之家 >> 編程語言 >  >> 更多程式語言 >> Delphi

Delphi 2009 新增 Character 單元[2]:IsLetter、IsUpper、IsLower、IsDigit、IsNumber 字符分類函數

     編輯:Delphi

Delphi 2009 Character 單元進階:五大字符分類函數完整解析與測試

Delphi 2009 引入 Character 單元,提供 Unicode 感知的字符分類函數。本文詳細講解 IsLetter、IsUpper、IsLower、IsDigit、IsNumber 的判定範圍、重載形式與實測結果。

五大函數速覽

函數判定內容核心範圍備註
IsLetter是否字母A-Z, a-z含 Unicode 字母
IsUpper是否大寫字母A-Z含 Unicode 大寫
IsLower是否小寫字母a-z含 Unicode 小寫
IsDigit是否十進制數字0-9僅 ASCII 數字
IsNumber是否數字符號0-9 + ¹²³¼½¾ 等含上標/分數符號

雙重載形式

function IsXxx(C: Char): Boolean;           // 單字符判定
function IsXxx(const S: string; Index: Integer): Boolean; // 字符串指定位置判定 (1-based)

完整測試代碼

unit Unit1;
interface
uses
  Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
  Dialogs, StdCtrls;

type
  TForm1 = class(TForm)
    Button1: TButton; // IsLetter
    Button2: TButton; // IsUpper
    Button3: TButton; // IsLower
    Button4: TButton; // IsDigit
    Button5: TButton; // IsNumber
    procedure Button1Click(Sender: TObject);
    procedure Button2Click(Sender: TObject);
    procedure Button3Click(Sender: TObject);
    procedure Button4Click(Sender: TObject);
    procedure Button5Click(Sender: TObject);
  end;

var
  Form1: TForm1;

implementation
{$R *.dfm}
uses Character;

{ IsLetter: 是否字母 }
procedure TForm1.Button1Click(Sender: TObject);
var b1,b2,b3: Boolean;
begin
  b1 := IsLetter('A');  // True
  b2 := IsLetter('a');  // True
  b3 := IsLetter('9');  // False
  ShowMessageFmt('%s,%s,%s', [BoolToStr(b1,True), BoolToStr(b2,True), BoolToStr(b3,True)]);
  // True,True,False

  b1 := IsLetter('D2009', 1); // 'D' -> True
  b2 := IsLetter('D2009', 2); // '2' -> False
  ShowMessageFmt('%s,%s', [BoolToStr(b1,True), BoolToStr(b2,True)]);
  // True,False
end;

{ IsUpper: 是否大寫字母 }
procedure TForm1.Button2Click(Sender: TObject);
var b1,b2,b3: Boolean;
begin
  b1 := IsUpper('A');  // True
  b2 := IsUpper('a');  // False
  b3 := IsUpper('9');  // False
  ShowMessageFmt('%s,%s,%s', [BoolToStr(b1,True), BoolToStr(b2,True), BoolToStr(b3,True)]);
  // True,False,False

  b1 := IsUpper('Delphi', 1); // 'D' -> True
  b2 := IsUpper('Delphi', 2); // 'e' -> False
  ShowMessageFmt('%s,%s', [BoolToStr(b1,True), BoolToStr(b2,True)]);
  // True,False
end;

{ IsLower: 是否小寫字母 }
procedure TForm1.Button3Click(Sender: TObject);
var b1,b2,b3: Boolean;
begin
  b1 := IsLower('A');  // False
  b2 := IsLower('a');  // True
  b3 := IsLower('9');  // False
  ShowMessageFmt('%s,%s,%s', [BoolToStr(b1,True), BoolToStr(b2,True), BoolToStr(b3,True)]);
  // False,True,False

  b1 := IsLower('Delphi', 1); // 'D' -> False
  b2 := IsLower('Delphi', 2); // 'e' -> True
  ShowMessageFmt('%s,%s', [BoolToStr(b1,True), BoolToStr(b2,True)]);
  // False,True
end;

{ IsDigit: 是否十進制數字 }
procedure TForm1.Button4Click(Sender: TObject);
var b1,b2,b3: Boolean;
begin
  b1 := IsDigit('A');      // False
  b2 := IsDigit('½');      // False (分數非十進制)
  b3 := IsDigit('9');      // True
  ShowMessageFmt('%s,%s,%s', [BoolToStr(b1,True), BoolToStr(b2,True), BoolToStr(b3,True)]);
  // False,False,True

  b1 := IsDigit('D2009', 1); // 'D' -> False
  b2 := IsDigit('D2009', 2); // '2' -> True
  ShowMessageFmt('%s,%s', [BoolToStr(b1,True), BoolToStr(b2,True)]);
  // False,True
end;

{ IsNumber: 是否數字符號 (範圍最廣) }
procedure TForm1.Button5Click(Sender: TObject);
var b1,b2,b3: Boolean;
begin
  b1 := IsNumber('A');     // False
  b2 := IsNumber('½');     // True (分數符號)
  b3 := IsNumber('9');     // True
  ShowMessageFmt('%s,%s,%s', [BoolToStr(b1,True), BoolToStr(b2,True), BoolToStr(b3,True)]);
  // False,True,True

  b1 := IsNumber('123¹²³¼½¾', 1); // '1' -> True
  b2 := IsNumber('123¹²³¼½¾', 4); // '¹' -> True
  ShowMessageFmt('%s,%s', [BoolToStr(b1,True), BoolToStr(b2,True)]);
  // True,True
end;

end.

關鍵差異:IsDigit vs IsNumber

字符IsDigitIsNumber說明
0-9TrueTrue標準數字
¹ ² ³ (上標)FalseTrueUnicode 數字符號
¼ ½ ¾ (分數)FalseTrue通用數字符號
① ② ③ (圈數)FalseTrue帶圈數字
中文數字 一二三FalseTrue*視 Unicode 版本而定

* 實測中文數字在某些 Delphi 版本中 IsNumber 返回 True,建議實測確認。

Unicode 感知優勢

  • 傳統 SysUtils 函數 (如 IsAlpha) 僅支持 ANSI/當前代碼頁
  • Character 單元函數基於 **Unicode 標準屬性**,正確處理多語言字符
  • 適用於驗證用戶輸入、解析文本、詞法分析器等場景

性能提示

  • 單字符調用極快,無額外開銷
  • 大批量字符串掃描時,考慮緩存結果或使用查找表
  • 字符串重載 IsXxx(S, Index) 內部調用 S[Index],注意 1-based 索引

Character 單元為 Delphi 2009+ 帶來真正的 Unicode 級字符分類能力,是現代文本處理的標準工具箱。

  1. 上一篇文章:
  2. 下一篇文章:
Copyright © 程式碼之家 All Rights Reserved