3

我正在使用 Delphi Rio 10.3.2,我需要了解一个字符串是否只有 ASCII 字符。

此外,如果它不只包含 ASCII 字符,我需要了解它是否是西里尔文。

我在考虑 unicode 范围..so

这是拉丁语:

https://jrgraphix.net/r/Unicode/0020-007F

这是西里尔文:

https://jrgraphix.net/r/Unicode/0400-04FF

但我不知道如何检查 unicode 范围,也不知道这是否是实现我需要的好方法。

有人可以帮忙吗?谢谢你。

4

2 回答 2

4

逐个遍历字符并检查它们的序数值。例如:

var
  c: char;
  str: string;
....
str := ...;
for c in str do
  if InRange(Ord(c), $0020, $007f) then
    // ASCII
于 2019-09-19T14:49:14.393 回答
2

TPerlRegEx是你的朋友!

如果您以前没有使用过这些,请不要惊慌。

我刚刚找到了使用这些的“SkillSprint” ——我还没有看过,但它可能对你有帮助。

还有很多在线工具可以帮助您测试您的 RegEx 语法,看看它是否有效。 这个链接指向我自己用过的一个(有很多可用的)。

function IsJustAscii(Input: String): Boolean
var
  pRegEx: TPerlRegEx;
begin
  pRegEx:=TPerlRegEx.Create;
  pegEx.RegEx:='^[\x20-\x7f]*$';           // Any number (including 0) of ascii characters 
  pRegEx.Subject:=Input;
  pRegEx.Options:=[preSingleLine, preMultiLine];
  Result:=pRegEx.Match;
  FreeAndNil(pRegEx);
end

function ContainsCyrillic(Input: String): Boolean
var
  pRegEx: TPerlRegEx;
begin
  pRegEx:=TPerlRegEx.Create;
  pegEx.RegEx:='[\x{0400}-\x{04ff}]+';    // one or more cyrillic characters
  pRegEx.Subject:=Input;
  pRegEx.Options:=[preSingleLine, preMultiLine];
  Result:=pRegEx.Match;
  FreeAndNil(pRegEx);
end

第一个函数检查整个字符串是否仅包含 Ascii 字符(您可能希望允许换行符、制表符、回车符等)

第二个函数查找字符串中是否有任何西里尔字符。

于 2019-09-19T15:00:33.550 回答