2009-09-24 32 views
5

Tôi đã thực hiện một chút tìm kiếm về điều này. Tìm thấy nhiều kịch bản tính nhân vật và thậm chí tính từ nhưng không thể tìm thấy một mà loại bỏ bất kỳ từ nào vượt quá giới hạn từ ....Giới hạn các từ trong một textarea

Đây là kịch bản của tôi cho đến nay ...:

var maxWords = 10; 
function countWordsLeft(field) {  
    totalWords = field.value.split(' ');  
    if (totalWords.length > maxWords) 
     field.value = field.value.substring(0, maxWords); 
    else 
     document.getElementById('description_count').innerHTML = maxWords - totalWords.length; 
} 

tôi đã có dòng sau mà tôi sao chép từ một số kịch bản nhân vật nhưng rõ ràng công việc này wont bởi vì tôi đang đếm từ

if (totalWords.length > maxWords) 
    field.value = field.value.substring(0, maxWords); 

làm thế nào để làm cho kịch bản xóa bất kỳ từ nào bổ sung thêm vượt quá giới hạn? Tôi cần điều này đặc biệt là nếu họ dán vào một mô tả ... Nó cần phải đếm các từ và sau đó xóa bất kỳ từ nào vượt quá giới hạn.

Đánh giá cao sự trợ giúp của bạn!

+0

** Xác định từ **, xin vui lòng. Những từ này có phải là "tự chứa", "43", "quán cà phê", "курица" không? – kangax

Trả lời

4
field.value = field.value.split(' ').splice(0, maxWords).join(' '); 

cập nhật
tôi nhận thấy rằng điều này cũng đếm n khoảng trống trong một hàng như n-1 lời nói, mà là cố định của thành viên này:

var a = field.value.split(' '); 
var words=0, i=0; 
for(; (i<a.length) && (words<maxWords); ++i) 
    if(a[i].length) ++words; 
field.value = a.splice(0,i).join(' '); 
0
function wordlimit(s, n){ 
var rx= RegExp('([a-zA-Z]+\\S+\\s+){'+n+'}','g'); 
while(rx.test(s)){ 
    return s.substring(0, rx.lastIndex); 
} 
return s; 
} 

// test

s= 'the quick red fox jumps over the lazy brown dog\'s back'; 
alert(wordlimit(s, 8)); 

// field.value = wordlimit (field.value, 8);

0

Hoặc bạn có thể làm điều gì đó như:

function truncateStringToMaxWords(string, maxWords) 
{ 
    var whitespace = string.match(/\s+/g); 
    var words = string.split(/\s+/); 

    var finished = []; 
    for(var i = 0; i < maxWords && words.length > 0; i++) 
    { 
    if (words[0] == "") { i--; } 
    finished.push(words.shift()); 
    finished.push(whitespace.shift()); 
    } 
    return finished.join(''); 
} 
field.value = truncateStringToMaxWords(field.value, 5); 

Trong đó sẽ giữ khoảng trắng còn nguyên vẹn của mình.

3

tôi có lẽ sẽ sử dụng này:

var maxWords = 10; 
function limitLengthInWords(field) { 
    var value = field.value, 
     wordCount = value.split(/\S+/).length - 1, 
     re = new RegExp("^\\s*\\S+(?:\\s+\\S+){0,"+(maxWords-1)+"}"); 
    if (wordCount >= maxWords) { 
     field.value = value.match(re); 
    } 
    document.getElementById('description_count').innerHTML = maxWords - wordCount; 
} 

này sẽ duy trì khoảng trắng ở đầu và giữa các từ.

0

Chức năng này sẽ hạn chế, và cho phép không có nhiều từ:

function limitWords(id) { 
    var maxWords=5; 
    var d=document.getElementById(id); 
    if (d.value.split(' ').length > maxWords) { 
     t=d.value.substring(0,d.value.lastIndexOf(' ')); 
     d.value=t.substring(0,t.lastIndexOf(' ')+1); 
    } 
} 

HTML mẫu

<textarea id='txt' rows="2" onkeyup="limitWords(this.id)"></textarea> 
1
<script language="javascript" type="text/javascript"> 
function limitText(limitField, limitCount, limitNum) { 
    if (limitField.value.length > limitNum) { 
     limitField.value = limitField.value.substring(0, limitNum); 
    } else { 
     limitCount.value = limitNum - limitField.value.length; 
    } 
} 
</script> 
4

jQuery Đơn giản chỉ cần đếm được Plugin
Cung cấp một nhân vật hoặc từ truy cập (và giới hạn) cho bất kỳ đầu vào văn bản hoặc textarea. Hoạt động khi nhập hoặc dán văn bản.

@version 0.4.2
@homepage http://github.com/aaronrussell/jquery-simply-countable/
@author Aaron Russell http://www.aaronrussell.co.uk

Bản quyền (c) 2009-2010 Aaron Russell
kép cấp phép theo MIT http://www.opensource.org/licenses/mit-license.php
và GPL http://www.opensource.org/licenses/gpl-license.php giấy phép.

2

tốt này giúp

function limit_words($post_content, $word_limit=30) 
{ 
$words = explode(" ",$post_content); 
return implode(" ",array_splice($words,0,$word_limit)); 
} 
0

tôi đã làm nó như thế này

function limitWord(myString, limit){ 
return myString 
    .replace(/\s+/g, ' ') // remove extra spaces between words 
    .split(' ')   // split string into array (using spaces as seperator) 
    .splice(0, limit)  // splice the array to the desired word limit 
    .join(' ');   // join it back into string (using spaces as seperator) 
} 
+0

Câu trả lời này đã bị gắn cờ để đánh giá chất lượng do độ dài của nó. SO thích câu trả lời với một số văn bản giải thích cách mã này giải quyết vấn đề của OP. Vui lòng đọc [answer]. Cảm ơn. –

+0

tốt hơn bây giờ @EngineerDollery? –

+0

Cá nhân, tôi nghĩ giải pháp đơn giản đến mức không cần nhiều rác. Nhưng, nó đã bị gắn cờ, và tiếc là nó sẽ lại bị gắn cờ. Tôi nghĩ rằng hệ thống gắn cờ xem xét số dư của văn bản thành mã và bạn đã tạo mã thậm chí còn lâu hơn nên số dư của bạn thậm chí còn sai lệch hơn. –

Các vấn đề liên quan