在delphi中修剪是否可以绕过?

时间:2017-03-16 00:07:49

标签: delphi delphi-10-seattle

我试图通过执行以下操作检查字符串是否为空

if trim(somestring) = '' then
begin
//that an empty string
end

我正在我的客户端应用程序中执行此空检查,但我注意到一些客户端即使应用此检查也会插入空字符串。

在我的Linux服务器端,显示为正方形的空字符,当我复制这些字符时,我可以绕过空字符串检查,如下面的示例

 ‍‍‍ 

如果你复制这个空的字符,检查将不会受影响我怎么能避免呢?

2 个答案:

答案 0 :(得分:5)

您的代码工作正常,字符串不为空。空字符串是长度为零的字符串,它没有字符。你指的是空字符,但没有这样的东西。什么时候。系统显示一个小的空方块,表示所选字体没有该字符的字形。

让我们假设这些字符串无效。在这种情况下,您遇到的真正问题是您还没有完全理解字符串有效所需的属性。如果字符串包含至少一个序数值大于32的字符,则假定字符串有效,则编写代码。显然,该测试不正确。您需要退后一步,制定出有效的准确规则。只有当这些在您的脑海中清楚时,您才能纠正您的程序并正确检查其有效性。

另一方面,也许这些字符串是有效的,错误只是您在检查数据时错误地确定了。只有你知道这一点,我们没有这方面的信息。

所有这一切的有用技巧是检查字符串的序数值。循环打印每个字符的序数值。这样你就可以看到真正存在的东西,而不是非打印字符,没有字形的字符,无效的编码等等。

答案 1 :(得分:1)

由于Trim是一个非常简单的函数,它只省略了ASCII表中小于或等于dec 32的字符

(来自System.SysUtils.pas的样本)

  

而S.Chars [L]< =' '做Dec(L);

因此,由于您的输入字符串使用了错误的编码,您可能无法看到一些异国情调的字符(> ASCII 128)。 尝试使用:

  

StrToInt(ORD(SomeChar))   在每个没有"修剪"并用手将其删除或检查您的编码。

亲切的问候