如何过滤Oracle Forms中文本项字段上的字符?

时间:2009-02-19 21:14:44

标签: forms oracle oracleforms

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

此致 维杰

3 个答案:

答案 0 :(得分:2)

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

在该功能上,您可以使用无效值范围。该范围以ASCII格式表示。

答案 1 :(得分:2)

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

答案 2 :(得分: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#',并且您的过滤器掩码为'!@#$%^&amp; *',则在执行TRANSLATE后,您的结果将为'ABCDEF'。然后,您可以将此值重新分配给表单字段。如果您只是想以静默方式去除字符,可以跳过LENGTH检查并简单地将TRANSLATE的输出分配回表单字段:

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

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