0

我们正在使用 oracle 表单......我们必须保护(或)阻止特殊字符的文本项字段。喜欢(!@#$%^&*)请发送一些指导......在此先感谢......

问候,维杰

4

3 回答 3

2

哪个版本的表格?

蛮力法:

v_prohibited_chars VARCHAR2(100) := '!@#$%^&*';
v_result           VARCHAR2(4000);
...
-- strip prohibited characters
v_result := TRANSLATE(:form_field,'A'||v_prohibited_chars,'A');

-- if anything was stripped, lengths will differ
IF LENGTH(:form_field) <> LENGTH(v_result) THEN
  error...
END IF

如果我正确理解您的评论,您是否希望能够从表单字段中过滤掉特殊字符?

上面的代码做到了这一点,并将结果放在 v_result 中。因此,如果您的输入值为 'ABC#DEF#',并且您的过滤器掩码是 '!@#$%^&*',那么在执行 TRANSLATE 后,您的结果将是 'ABCDEF'。然后,您可以将此值重新分配给您的表单字段。如果您只是想默默地剥离字符,您可以跳过 LENGTH 检查,只需将 TRANSLATE 的输出分配回您的表单字段:

:form_field := TRANSLATE(:form_field,'A'||v_prohibited_chars,'A');

TRANSLATE 所做的是将第一个参数中的字符与第二个参数中的字符进行比较。当它找到匹配项时,它将该字符转换为第三个参数中的相应字符。如果第三个参数中没有对应的字符存在于第二个中的一个,则该字符被转换为 NULL。如果字符没有出现在第二个参数中,则保持不变。因此,字符“A”被转换为“A”,而掩码中的所有其他字符都被转换为 NULL。第三个参数不能为 NULL,因此 'A' 到 'A' 的虚拟转换。

于 2009-02-19T22:51:03.217 回答
2

当您的文本框作为一些输入文本时,您必须具有验证所有输入的功能。

在该函数上,您有一个无效值范围。该范围以 ASCII 格式表示。

于 2009-02-19T21:26:15.290 回答
2

您可以使用格式掩码属性,如 999.99

于 2009-02-19T21:41:39.903 回答