【问题标题】:How to filtering out characters on text item field in Oracle Forms?如何过滤掉 Oracle Forms 中文本项字段上的字符?
【发布时间】:2009-02-19 21:14:43
【问题描述】:

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

问候, 维杰

【问题讨论】:

    标签: forms oracle oracleforms


    【解决方案1】:

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

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

    【讨论】:

    • 谢谢,Oracle 中是否有可用的内置函数来执行此操作?否则我们必须坐下来为此功能编写一个函数。问候,维杰
    【解决方案2】:

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

    【讨论】:

      【解决方案3】:

      哪个版本的表单?

      蛮力法:

      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'。然后,您可以将此值重新分配给您的表单字段。如果您只想默默地剥离字符,您可以跳过长度检查,只需将 TRANSLATE 的输出分配回您的表单字段:

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

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

      【讨论】:

      • 谢谢,我们必须编写一个代码来过滤出现在实际文本中任何地方的特殊字符。所有字符都会改变例如,'JI345LP#'或'AB#CD'没有合适的序列...在这种情况下如何使用翻译来获取字段的长度...请指导我们...再次感谢。
      • 修改了我的答案以解决您的评论。
      猜你喜欢
      • 2011-04-03
      • 2023-03-28
      • 2017-02-06
      • 1970-01-01
      • 1970-01-01
      • 2013-06-14
      • 1970-01-01
      • 2018-09-11
      • 1970-01-01
      相关资源
      最近更新 更多