代码之家  ›  专栏  ›  技术社区  ›  Mark Schultheiss

检查特定字符组合的文本区域

  •  0
  • Mark Schultheiss  · 技术社区  · 16 年前

    我有一个文本区域,可以用各种方式填充,包括粘贴、键盘输入、自动完成等。

    现在,我想验证这个文本区域,如果它包含任何组合,包括一些字符的倍数,如果包含,则将其设置为空。

    我要过滤的字符是:制表符、新行、空格、回车以及一些水印文本——基本上是任何没有意义的字符。

    请注意,有效文本可能包含特殊字符,如()!#%<>,;:/[]可能还有更多。

    有效值可能包含新行、空格等,但也将包含其他有效字符(上面的内容加上0-9、a-z、a-z等)。

    目前,我在jquery.change事件中包装了以下内容:

    <textarea cols="70" rows="3" class="cssTextarea cptEntryArea formFocus"></textarea>
    
    $('.cptEntryArea').live('change', function(e)
    {
        var myval = "";
        myval = $(this).val().trim();
        myval.replace(/\r\n|\r|\n|\u0085|\u000C|\u2028|\u2029|^\s*$|^\s+|\s+$/g, "");
        if ((myval == watermarkText) || (myval.length == 0))
        {
            $(this).val("");
            e.stopPropagation();
            return false;
        };
    });
    

    这个想法是简单地将它清空,如果它有任何组合的“非视觉”字符。

    有没有优化或更好的方法来完成这项工作?

    edit1:看起来我可以在这里做一些调整,因为jquery微调是:

    trim: function( text ) {
            return (text || "").replace( /^\s+|\s+$/g, "" );
        }
    
    2 回复  |  直到 16 年前
        1
  •  0
  •   Gary Green    16 年前

    这听起来很奇怪。水印文本的作用是什么?抓住它不是更好的主意吗 之前 文本被放入文本区域,即按下键,如果ASCII值为<33,则返回空值。您的事件仅在项目更改/丢失焦点时激发,而不是在输入某些文本时立即激发。

    你可以试试看 /mg 对于regex多行。

        2
  •  0
  •   Mark Schultheiss    16 年前

    当它结束时,我必须更有效地管理我的击键以及最终结果的事件管理。我的解决方案是一个非常复杂的交互页面,其中使用多个方法来填充值,其中包含可配置的选项,其中允许使用哪一组方法和可接受的值,从而解决方案的复杂性。

    用于填充文本区域的各种方法:

    • 自由格式(用户输入)
    • 自动完成-验证并从用户输入的字符串中选择以生成选择列表。
    • 文本必须与数据库完全匹配
    • 允许自由格式文本,但关联的ID必须在数据库中
    • 允许新用户文本,但必须作为新值发布到选择列表
    • 编程填充(从数据库/其他值中提取并填充)

    所有这些都使验证规则变得复杂,但是另一个答案正在被接受,因为它最有助于解决问题。

    请注意,实际上有多个击键可以在这里进行,根据特定用户的击键和正在进行的选项进行各种操作。

    感谢大家的帮助。