验证textarea中超长单词的用户输入

时间:2013-04-25 11:00:45

标签: javascript jquery jquery-validate validation

我在这里遇到问题,在textarea中验证用户的输入。 用户可以在其中一个textarea feild中输入他的描述。但有些人只是把“aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa”之类的随机文本放在了最低长度要求之外。

现在我想阻止用户输入没有任何空格的长文本,因为它会破坏我的页面的UI。 用户输入的没有任何空格的长文本也可以是有效的URL。那么我该如何管理这个&只有当文本太长并且它不是有效的URL?

时,才会向用户抛出错误以更正文本

PS:我不想自己分割字符串..我只想检测它并在客户端验证时向用户抛出错误。为了结束一些疑问,我将进行服务器端验证,我将强行进入空间并将其保存在DB中。但我期待在客户端解决这个问题

7 个答案:

答案 0 :(得分:2)

function validate()
{
  var expression = /[-a-zA-Z0-9@:%_\+.~#?&//=]{2,256}\.[a-z]{2,4}\b(\/[-a-zA-Z0-9@:%_\+.~#?&//=]*)?/gi;
  var wordLengthExpr = /\b[^\s]{50,}\b/;
  var regex = new RegExp(expression);
  var wordLengthRegex = new RegExp(wordLengthExpr);
  var t = $("#myTextarea").val();
  if (t.match(regex) ||  !t.match(wordLengthRegex))
  {
    //valid
  }
  else
  {
    //throw error
  }
}

答案 1 :(得分:2)

var STRING_MAX_LENGTH = 10;

var description = 'aaa aaaaaaaaaa bbbbbbbbbb http://www.google.com/search?q=client-side-filtering';
var array = description.split( ' ' );

$.each( array, function() {
  if ( this.length >= STRING_MAX_LENGTH ) {
    if( /^([a-z]([a-z]|\d|\+|-|\.)*):(\/\/(((([a-z]|\d|-|\.|_|~|[\u00A0-\uD7FF\uF900-\uFDCF\uFDF0-\uFFEF])|(%[\da-f]{2})|[!\$&'\(\)\*\+,;=]|:)*@)?((\[(|(v[\da-f]{1,}\.(([a-z]|\d|-|\.|_|~)|[!\$&'\(\)\*\+,;=]|:)+))\])|((\d|[1-9]\d|1\d\d|2[0-4]\d|25[0-5])\.(\d|[1-9]\d|1\d\d|2[0-4]\d|25[0-5])\.(\d|[1-9]\d|1\d\d|2[0-4]\d|25[0-5])\.(\d|[1-9]\d|1\d\d|2[0-4]\d|25[0-5]))|(([a-z]|\d|-|\.|_|~|[\u00A0-\uD7FF\uF900-\uFDCF\uFDF0-\uFFEF])|(%[\da-f]{2})|[!\$&'\(\)\*\+,;=])*)(:\d*)?)(\/(([a-z]|\d|-|\.|_|~|[\u00A0-\uD7FF\uF900-\uFDCF\uFDF0-\uFFEF])|(%[\da-f]{2})|[!\$&'\(\)\*\+,;=]|:|@)*)*|(\/((([a-z]|\d|-|\.|_|~|[\u00A0-\uD7FF\uF900-\uFDCF\uFDF0-\uFFEF])|(%[\da-f]{2})|[!\$&'\(\)\*\+,;=]|:|@)+(\/(([a-z]|\d|-|\.|_|~|[\u00A0-\uD7FF\uF900-\uFDCF\uFDF0-\uFFEF])|(%[\da-f]{2})|[!\$&'\(\)\*\+,;=]|:|@)*)*)?)|((([a-z]|\d|-|\.|_|~|[\u00A0-\uD7FF\uF900-\uFDCF\uFDF0-\uFFEF])|(%[\da-f]{2})|[!\$&'\(\)\*\+,;=]|:|@)+(\/(([a-z]|\d|-|\.|_|~|[\u00A0-\uD7FF\uF900-\uFDCF\uFDF0-\uFFEF])|(%[\da-f]{2})|[!\$&'\(\)\*\+,;=]|:|@)*)*)|((([a-z]|\d|-|\.|_|~|[\u00A0-\uD7FF\uF900-\uFDCF\uFDF0-\uFFEF])|(%[\da-f]{2})|[!\$&'\(\)\*\+,;=]|:|@)){0})(\?((([a-z]|\d|-|\.|_|~|[\u00A0-\uD7FF\uF900-\uFDCF\uFDF0-\uFFEF])|(%[\da-f]{2})|[!\$&'\(\)\*\+,;=]|:|@)|[\uE000-\uF8FF]|\/|\?)*)?(\#((([a-z]|\d|-|\.|_|~|[\u00A0-\uD7FF\uF900-\uFDCF\uFDF0-\uFFEF])|(%[\da-f]{2})|[!\$&'\(\)\*\+,;=]|:|@)|\/|\?)*)?$/i . test( this ) ) {
      alert( this + ' is an URL' );
    } else {
      alert( this + ' is not an URL' );
    }
  }
});

http://jsfiddle.net/vVYAp/

答案 2 :(得分:1)

这是一个两步过程:

      
  1. 确定任何单词是否太长。
  2.   
  3. 如果是,请确定它们是否为有效网址。
  4. var validateWordLength = function (str) {
        var maxLength = 50,  // or whatever max length you want
            reURL = /^(ftp|http|https):\/\/[^\s]+$/, // use whatever regular expression for URL matching you feel best
            words = str.split(/\s+/),
            i;
    
        for (i = 0; i < words.length; i += 1) {
            if (words[i].length > maxLength) {
                // test for url
                // but bear in mind the answer at http://stackoverflow.com/questions/1410311/regular-expression-for-url-validation-in-javascript
                // testing for url may not be fruitful
                if (!reURL.test(words[i])) {
                    return false;
                }
            }
        }
    
        return true;
    };
    

答案 3 :(得分:0)

试试这个

    var value = Your text;

    var result = value.replace(" ","");

if(value.length == result .length)
  //not valid
else
 //valid

答案 4 :(得分:0)

您可以获得每个单词的长度,然后可以决定是否允许用户 -

var arr = text.split(' ');

$.each(arr,function(){
   console.log(this.length);
   // check valid word length
}); 

http://jsfiddle.net/mohammadAdil/cNZtn/

答案 5 :(得分:0)

如果您使用jQuery validate plugin,可以为其添加方法:

jQuery.validator.addMethod("samechars", function(value, element) { 
    return this.optional(element) ||  !/([a-z\d])\1\1/i.test(value); 
}, "Invalid input");

答案 6 :(得分:0)

如果您想使用jQuery,可以使用以下内容:

$("form").submit(function(e){
var $textarea = $('#msg'),
    maxWordLength = 20;

            var value = $textarea.val().split(' '),
                longWord = false;

            for(var n = 0; n < value.length; n++) {
                if(value[n].length >= maxWordLength)
                    longWord = true;
            }

if(longWord) {
    alert('Too long word');
    return false;
}
});

这是一个小提琴: http://jsfiddle.net/pJgyu/31286/