检查某些字符组合的文本区域

时间:2010-08-18 18:33:40

标签: javascript jquery regex textarea

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

现在我要验证此文本区域,如果包含任何组合,包括一些字符的倍数,如果是,请将其设置为空。

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

请注意,有效文字可能包含特殊字符,例如()!#%<> ,;:/ || {} [],还可能包含其他字符。

有效值可能包含新行,空格等,但也会包含其他有效字符(上面的内容加上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 个答案:

答案 0 :(得分:0)

听起来很奇怪。什么是watermarkText?将文本放入textarea之前(即在keydown上),如果ascii值&lt;返回null,那么在之前捕获会不是更好的主意。 33?您的事件仅在项目更改/失去焦点时触发,而不是在输入某些文本时立即触发。

您可以尝试为正则表达式多行执行/mg

答案 1 :(得分:0)

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

用于填充textarea的各种方法:

  • 免费表格(用户输入)
  • 自动填充 - 验证并选择用户输入的字符串以生成选择列表。
  • 文本必须与数据库完全匹配
  • 允许使用自由格式文本,但关联的ID必须位于数据库中
  • 允许使用新用户文本,但必须将其作为新值发布到选择列表
  • 程序化人口(从数据库/其他值拉出并填充)

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

请注意,实际上有多个按键可以根据按键和特定用户的游戏选项进行各种操作。

感谢大家的帮助。