2013-04-25 38 views
0

我在验证用户在textarea中的输入时遇到问题。 用户想要在表单中的textarea表单中输入他的描述。但有些人只是把随机文本,如'aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa'或其他东西绕过最低长度的要求。验证textarea中额外长单词的用户输入

现在我想阻止用户输入这样的长文本没有任何空格,因为它会破坏我的页面的用户界面。 用户输入的长文本没有任何空格也可以是有效的URL。那么我如何管理这个&向用户抛出一个错误,以纠正文本,只有当它太长,它不是一个有效的网址?

PS:我不想分割字符串我自己..我只是想检测它,并抛出错误的用户在客户端验证。只是为了解决一些疑问,我会做服务器端验证,我将强制输入一个空间并将其保存在数据库中。但我期待解决在客户端这个问题

+0

你确定你要解决一个真正的问题?实际上有多少用户在使用它?它真的很重要吗?尝试使用带有溢出省略号的CSS。 – 2013-04-25 11:05:58

+0

我强烈建议你不要使用客户端输入过滤,这是非常糟糕的做法,并且很容易被绕过。 – Pfft 2013-04-25 11:13:14

+0

@JimmyvanBeele,为什么在客户端验证输入是不好的做法? – 2013-04-25 11:16:10

回答

1

这是一个两步过程:

  1. 确定是否有词太长。
  2. 如果是这样,请确定它们是否是有效的URL。
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; 
}; 
+0

你的代码看起来不错,但如果单词数组有3个值,并且如果第二个值设置valid = false,并且第三个值再次设置valid = true,那么在每个函数之后valid = true将被返回,这不应该是..我是对的? – 2013-04-25 13:10:48

+0

是的,你是对的。发现得好!我现在修复了这个问题。 – 2013-04-25 13:30:18

+0

它的okk ..但我越来越奇怪的错误:(我觉得放弃这个验证的事情:(因为当我写在每个函数内返回false netbeans显示错误说'匿名函数并不总是返回一个值':(它会被要求太多,但将是巨大的,如果ü可以显示与textarea的 – 2013-04-25 13:35:02

0

试试这个

var value = Your text; 

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

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

你可以得到每个单词的长度,然后可以决定是否允许用户或不 -

var arr = text.split(' '); 

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

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

2
function validate() 
{ 
    var expression = /[[email protected]:%_\+.~#?&//=]{2,256}\.[a-z]{2,4}\b(\/[[email protected]:%_\+.~#?&//=]*)?/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 
    } 
} 
+0

我编辑了我的答案,以更好地满足您的需求。 – MMeersseman 2013-04-25 11:14:09

+0

Hii @MMeersseman。你可以请你陈述你的正则表达式吗?我试过了,但即使当我输入'aa'或'ab'任何合法的东西时,它也给我错误 – 2013-04-25 11:44:17

+0

我编辑了我的帖子,我犯了一个错误。它现在应该工作。基本上你搜索一个包含10个或更多非空白字符的单词。让我知道你是否仍然有问题。您可以将“10”更改为适合您需要的任何内容。 – MMeersseman 2013-04-25 12:01:26

0

如果使用jQuery validate plugin可以加点ethod它:

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

+0

当然,这可以写只有JavaScript也,我有一个jQuery项目中的这个功能,所以这是我的代码从该项目。 – 2013-04-25 12:14:10

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/