如何在Delphi中限制TEdit上可接受的输入日语字符?

时间:2017-01-19 05:32:31

标签: delphi

如何在Delphi中限制TEdit上可接受的输入日语字符?

我在Delphi XE8中有一个TEdit,我只需要输入日文字符,那么我该怎么做呢?

1 个答案:

答案 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;