Подсчет СЛОВ в форме
Добрый день. Помогите переделать скрипт. Приведу код подсчета симовлов в форме. Нужно чтобы подсчет происходил не символов а слов. Пожалуйста помогите.
Код: <script> function isSpace(s){ return (s==" " || s=="n" || s=="13" || s=="t" || s=="r")?true:false } function count(){ var c=0 var i var prevspace=true var str=document.forms.form.text.value for(i=str.length-1;i>=0;i--){ if(isSpace(str.charAt(i)) && prevspace){ }else{ c++ } prevspace=isSpace(str.charAt(i)) } document.forms.form.total.value=c return false } </script> <form enctype='multipart/form-data' name='form' action='#' method='post'> Сообщение: <textarea cols='60' rows='20' onkeypress='count()' onkeyup='count()' name='text'></textarea><br> Количество символов: <input type='text' name='total' size='6' > </form> |
|
var string = 'abc def ghi';
var test = string.split(/\s+/); alert(test.length); |
var string = ' abc def ghi '; var test = string.split(/\s+/); alert(test.length); Вывод -- не айс. Имхо так: var string = ' abc def ghi '; var test = string.match(/(\S+)/g); alert(test.length); |
Или так: :)
var string = ' abc def ghi '; var wordCount = 0; string.replace(/(^|\s)+[^\s]+/g, function(){wordCount++}); alert(wordCount); |
subzey, емнип, введение в регексп ИЛИ вызывает его сильное замедление (причем даже в перле). Ну, не говоря уже о replace :)
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd"> <html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en" lang="en"> <head> <title>match VS replace</title> <meta http-equiv="content-type" content="text/html;charset=utf-8" /> <meta name="generator" content="Geany 0.18.1.1" /> <script type="text/javascript"> function get_value() { return document.getElementById('input').value; } function print_result(res) { document.getElementById('output').appendChild(document.createElement('DIV')). appendChild(document.createTextNode(res)); } function test_match() { var value = get_value(), start = new Date().getTime(); // test for (var i = 1000; i--; ) { var words = value.match(/(\S+)/g); var wordCount = words && words.length; } // end var end = (new Date().getTime() - start); print_result('Replace: ' + end + 'ms'); } function test_replace() { var value = get_value(), start = new Date().getTime(); // test for (var i = 1000; i--; ) { var wordCount = 0; value.replace(/(^|\s)+[^\s]+/g, function(a){wordCount++}); } // end var end = (new Date().getTime() - start); print_result('Replace: ' + end + 'ms'); } </script> </head> <body> <p><textarea id="input" cols="40" rows="5">Lorem ipsum dolor sit amet, consetetur sadipscing elitr, sed diam nonumyeirmod tempor invidunt ut labore et dolore magna aliquyam erat, sed diamvoluptua. At vero eos et accusam et justo duo dolores et ea rebum. Stet clita kasd gubergren, no sea takimata sanctus est Lorem ipsum dolor sit amet. Lorem ipsum dolor sit amet, consetetur sadipscing elitr, sed diam nonumyeirmod tempor invidunt ut labore et dolore magna aliquyam erat, sed diamvoluptua. At vero eos et accusam et justo duo dolores et ea rebum. Stet clita kasd gubergren, no sea takimata sanctus est Lorem ipsum dolor sit amet.Lorem ipsum dolor sit amet, consetetur sadipscing elitr, sed diam nonumyeirmod tempor invidunt ut labore et dolore magna aliquyam erat, sed diamvoluptua. At vero eos et accusam et justo duo dolores et ea rebum. Stet clita kasd gubergren, no sea takimata sanctus est Lorem ipsum dolor sit amet.Lorem ipsum dolor sit amet, consetetur sadipscing elitr, sed diam nonumyeirmod tempor invidunt ut labore et dolore magna </textarea></p> <p><button onclick="test_match()">Match</button><button onclick="test_replace()">Replace</button></p> <div id="output"></div> </body> </html> |
Часовой пояс GMT +3, время: 14:51. |