我正在尝试验证一个字符串,它可以包含所有字母和数字字符,以及下划线(_)符号。
这是我目前所尝试的:
var
S: string;
const
Allowed = ['A'..'Z', 'a'..'z', '0'..'9', '_'];
begin
S := 'This_is_my_string_0123456789';
if Length(S) > 0 then
begin
if (Pos(Allowed, S) > 0 then
ShowMessage('Ok')
else
ShowMessage('string contains invalid symbols');
end;
end;
在拉撒路这一错误中有:
**错误:**参数1的类型不兼容:获得“字符集”,应为“变量”
很明显,我对Pos的使用是错误的,我不确定我的方法是否正确?
- 谢谢-谢谢
4条答案
按热度按时间iih3973s1#
如果字符串包含在Allowed中,则必须检查该字符串的每个字符
例如:
yhived7q2#
如果你使用的是Unicode版本的 Delphi (看起来是这样),注意SET OF CHAR不能包含Unicode字符集中的所有有效字符。那么这个函数可能会很有用:
但话又说回来,Unicode中并非所有字符(实际上是代码点)都可以用单个字符表示,有些字符可以用多种方式表示(既可以表示为单个字符,也可以表示为多个字符)。
但是只要你把自己约束在这些限制之内,上述函数中的一个应该是有用的。“指令添加到每个函数声明的末尾,如下所示:
pbwdgjma3#
Lazarus/Free Pascal没有为它重载pos,但是在单元strutils中有“posset”变量;
http://www.freepascal.org/docs-html/rtl/strutils/posset.html
关于Andreas的评论(恕我直言),你可以使用isemptystr。它的目的是检查只包含空格的字符串,但它基本上检查字符串是否只包含集合中的字符。
http://www.freepascal.org/docs-html/rtl/strutils/isemptystr.html
rbl8hiat4#
您可以使用正则表达式: