我们正在使用 oracle 表单......我们必须保护(或)阻止特殊字符的文本项字段。喜欢(!@#$%^&*)请发送一些指导......在此先感谢......
问候,维杰
我们正在使用 oracle 表单......我们必须保护(或)阻止特殊字符的文本项字段。喜欢(!@#$%^&*)请发送一些指导......在此先感谢......
问候,维杰
哪个版本的表格?
蛮力法:
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' 的虚拟转换。
当您的文本框作为一些输入文本时,您必须具有验证所有输入的功能。
在该函数上,您有一个无效值范围。该范围以 ASCII 格式表示。
您可以使用格式掩码属性,如 999.99