arrays - Delphi 检查字符是否在 'A' 范围内。 .'Z' 和 '0' 。 .'9'

标签 arrays string delphi range

我需要检查字符串是否仅包含以下范围内的字符:'A'..'Z'、'a'..'z'、'0'..'9',所以我写了这个函数:

function GetValueTrat(aValue: string): string;
const
  number = [0 .. 9];
const
  letter = ['a' .. 'z', 'A' .. 'Z'];
var
  i: Integer;
begin

  for i := 1 to length(aValue) do
  begin
    if (not(StrToInt(aValue[i]) in number)) or (not(aValue[i] in letter)) then
      raise Exception.Create('Non valido');
  end;

  Result := aValue.Trim;
end;

但是,例如,如果aValue = 'Hello'StrToInt 函数会引发异常。

最佳答案

一组独特的Char可用于您的目的。

function GetValueTrat(const aValue: string): string;
const
  CHARS = ['0'..'9', 'a'..'z', 'A'..'Z'];
var
  i: Integer;
begin
  Result := aValue.Trim;
  for i := 1 to Length(Result) do
  begin
    if not (Result[i] in CHARS) then
      raise Exception.Create('Non valido');
  end;
end;

请注意,在您的函数中,如果 aValue 包含空格字符 - 例如 'test value ' - 会引发异常,因此使用 Trimif 语句之后就没用了。

<小时/>

在我看来,像 ^[0-9a-zA-Z] 这样的正则表达式可以以更优雅的方式解决您的问题。

<小时/>

编辑
根据@RBA's comment对于这个问题,System.Character.TCharHelper.IsLetterOrDigit可以用来替代上述逻辑:

if not Result[i].IsLetterOrDigit then
  raise Exception.Create('Non valido');

关于arrays - Delphi 检查字符是否在 'A' 范围内。 .'Z' 和 '0' 。 .'9',我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/36938803/

相关文章:

javascript - 创建 React 动态表单

python - 两个多行字符串的水平串联

delphi - 求非常简单的TIdCommandHandler条件响应示例

德尔福;向无源控件添加 PopupMenu 支持

arrays - Cypress 将值推送到 json 数组中

java - 是否有适用于 Java 的高效 2D ArrayList 类?

Python在检测数组的排名后如何删除垃圾列

c - 带字符串数组的 strcpy

ruby - 如何在 ruby​​ 中的字符串中包含条件

delphi - 如何将光标移动到插入的结尾?使用ActiveDocument.Range.InsertAfter()之后