Как узнать, содержит ли слово стандартные символы ASCII? - PullRequest
1 голос
/ 19 сентября 2019

Я использую Delphi Rio 10.3.2, и мне нужно понять, имеет ли строка только символы ASCII или нет.

Кроме того, если она не содержит только символы ASCII, мне нужно понять, является ли она кириллицей.

Я думал о диапазонах Unicode .. так

это латиница:

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

и это кириллица:

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

Но я не знаю, как проверить диапазоны Unicode, а также я не знаю, является ли это хорошим способом достижения того, что мне нужно.

Кто-нибудь может помочь?Спасибо.

Ответы [ 2 ]

3 голосов
/ 19 сентября 2019

Поочередно просматривайте символы и проверяйте их порядковые значения.Например:

var
  c: char;
  str: string;
....
str := ...;
for c in str do
  if InRange(Ord(c), $0020, $007f) then
    // ASCII
1 голос
/ 19 сентября 2019

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 (вы можете разрешить переводы строки), табуляция, возврат каретки и т. д.)

Вторая функция определяет, есть ли в строке какие-либо символы кириллицы.

...