asia char's two bytes and code value bigger than 127
function CheckName(StrName:String;MaxLen:integer=4):Boolean; var i:integer; begin Result:=False; if Length(StrName)>MaxLen then Exit; for i:=1 to Length(StrName) do begin if ord(StrName[i])<127 then begin result:=false; exit; end; end; Result:=true; end;
//参考如下代码 function IsChineseCharacters(mChar: WideChar): Boolean; begin case mChar of #19968..#40869, #57344..#59492, #63744..#64041: Result := True; else Result := False; end; end; { IsChineseCharacters }function TryChineseName(mName: WideString): Boolean; var I: Integer; begin Result := False; if (Length(mName) < 2) or (Length(mName) > 4) then Exit; for I := 1 to Length(mName) do if not IsChineseCharacters(mName[I]) then Exit; Result := True; end; { TryChineseName }//Example procedure TForm1.Edit1Change(Sender: TObject); begin Caption := BoolToStr( TryChineseName(TEdit(Sender).Text), True ); end;
var i:integer;
begin
Result:=False;
if Length(StrName)>MaxLen then Exit;
for i:=1 to Length(StrName) do
begin
if ord(StrName[i])<127 then
begin
result:=false;
exit;
end;
end;
Result:=true;
end;
猩猩老兄和我写的差不多,不过应该还要判断一下中文的标点符号吧,因为逗号,句号什么的转换后也大于127。
我总觉得这样有欠缺,不知道为什么。
function IsChineseCharacters(mChar: WideChar): Boolean;
begin
case mChar of
#19968..#40869,
#57344..#59492,
#63744..#64041: Result := True;
else Result := False;
end;
end; { IsChineseCharacters }function TryChineseName(mName: WideString): Boolean;
var
I: Integer;
begin
Result := False;
if (Length(mName) < 2) or (Length(mName) > 4) then Exit;
for I := 1 to Length(mName) do
if not IsChineseCharacters(mName[I]) then Exit;
Result := True;
end; { TryChineseName }//Example
procedure TForm1.Edit1Change(Sender: TObject);
begin
Caption := BoolToStr(
TryChineseName(TEdit(Sender).Text),
True
);
end;