如何在Delphi中限制TEdit上可接受的输入日语字符?
我在Delphi XE8中有一个TEdit
,我只需要输入日文字符,那么我该怎么做呢?
答案 0 :(得分:3)
正如LU RD所提到的,很难区分中文/日文字符,但是如果您可以测试可能是日语here的字符范围,则可以使用以下功能。您需要将源文件格式更改为Unicode以输入Unicode字符,您可以通过右键单击编辑器并选择“文件格式”选项来执行此操作。
function IsStringJapanese(const S: string): boolean;
var
C: Char;
begin
Result := True;
for C in S do
begin
Result :=
// kanji
((C >= '一') and (C <= '龿'))
// hiragana
or ((C >= 'ぁ') and (C <= 'ゟ'))
// katakana
or ((C >= '゠') and (C <= 'ヿ'));
if not Result then
begin
Break;
end;
end;
end;
第二个问题是如何验证TEdit取决于您使用的是VCL还是FMX。在VCL中,您可以通过处理KeyPress事件来阻止键入某些字符,如下所示
procedure TMainForm.Edit1KeyPress(Sender: TObject; var Key: Char);
begin
if not IsStringJapanese(Key) then
begin
Key := #0;
end;
end;
但它不会阻止复制/粘贴字符串到编辑,您需要在使用之前验证文本。
在FMX中,您可以使用OnValidating事件
procedure TForm1.Edit2Validating(Sender: TObject; var Text: string);
begin
if not IsStringJapanese(Text) then
begin
raise Exception.Create('Text not japanese');
end;
end;