2014-02-10 31 views
6

我想通過短信網關發送文本,並且在from字段中它們具有11個字符的限制。而æ或ø或å算作兩個字符。 我使用jquery驗證器來計數,並顯示用戶消息,我怎樣才能得到maxlength,每次減2,用戶輸入æ或ø或å,並且只有減一個字符,當它是從a-z?jquery maxlength「æ」或「ø」或「å」應計爲兩個字符

現在的腳本,允許a-z和0到9以及空格,但它不會被算作兩個字符。我怎麼做?

jQuery.validator.addMethod("accept", function(value, element, param) { 
return value.match(new RegExp("^" + param + "$")); 
}); 
from: { 
      required: false, 
      accept: "[a-zA-Z0-9æøåÆØÅ ]+", 
      minlength: 2,  
      maxlength: 11 
}, 
+0

它是不相干會發生什麼其他角色? –

+0

嗨jukka,我想到有a-zA-Z0-9æøåÆØÅ和允許的空間,所有其他角色都應該被拒絕,並且應該算作兩個角色。 – Anders

回答

2

嘗試這樣:

function countChar(mystring){ 
    var count=0; 
    for (var i=0;i<mystring.length;i++) 
    { 
     if (mystring[i].match(/[æøåÆØÅ]/)) 
      count += 2; 
     else 
      count++; 
    } 
    return count; 
} 
+0

Hi tony,看起來像php,或者是它jquery ?,我問,因爲,我需要一個實時驗證,用戶不必發佈,有形式獲得反饋? – Anders

+1

@ user3291960這是純Javascript。我認爲你正在尋找這樣的東西: 'function validate(mystring) { var count = 0; for(var i in mystring) if(mystring [i] .match(/ [æøåÆÅÅ] /)) count + = 2; else if(mystring [i] .match(/ [a-z0-9]/i)) count ++; else { alert('Invalid char'+ mystring [i]); 返回false; } } if(count> 11 || count <2){alert('String length invalid'); 返回false; } return true; }' – ojovirtual

+0

嘿大家工作很好,但現在,它顯示,一個警告框,我如何將該腳本合併到一個新的jQuery.validator.addMethod,所以我可以輸出它爲maxlength ?? – Anders

1

您可以使用正則表達式來做到這一點:

var str = "A string with some strange characters like: æ ø å Æ Ø Å"; 
var total = str.length + (str.match(/æ|ø|Æ|Ø|Å/g)||[]).length; 

str.length = 55
total = 60

1

您需要先對其進行編碼。

function encode_utf8(s) { 
    return unescape(encodeURIComponent(s)); 
} 

function decode_utf8(s) { 
    return decodeURIComponent(escape(s)); 
} 

你可以看看http://jsfiddle.net/vLmQ8/來看看它的行動。如需更多信息,請參閱http://monsur.hossa.in/2012/07/20/utf-8-in-javascript.html

+0

這是正確的方法,因爲即使對於未明確要求的字符,它也可以工作。 (假設編碼實際上是UTF-8,但聽起來真的很有可能)。對於完整的答案,您應該擴展該代碼以實際計算編碼結果的長度...... –

相關問題