Javascript-форум (https://javascript.ru/forum/)
-   Общие вопросы Javascript (https://javascript.ru/forum/misc/)
-   -   Подсчет СЛОВ в форме (https://javascript.ru/forum/misc/9381-podschet-slov-v-forme.html)

wasia 13.05.2010 13:09

Подсчет СЛОВ в форме
 
Добрый день. Помогите переделать скрипт. Приведу код подсчета симовлов в форме. Нужно чтобы подсчет происходил не символов а слов. Пожалуйста помогите.
Код:
<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>

Gvozd 13.05.2010 13:17

http://javascript.ru/String/split

atxquadro 17.05.2010 18:57

var string = 'abc def ghi';
var test = string.split(/\s+/);
alert(test.length);

e1f 17.05.2010 19:02

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);

subzey 17.05.2010 19:40

Или так: :)
var string = ' abc def ghi ';

var wordCount = 0;
string.replace(/(^|\s)+[^\s]+/g, function(){wordCount++});

alert(wordCount);

e1f 17.05.2010 19:58

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, время: 03:39.