【问题标题】:jquery maxlength "æ" or "ø" or "å" should count as two charactersjquery maxlength "æ" or "ø" or "å" 应该算作两个字符
【发布时间】:2023-03-11 22:43:02
【问题描述】:

我想通过短信网关发送文本,它们在 from 字段中限制为 11 个字符。 æ 或 ø 或 å 算作两个字符。 我使用 jquery 验证器来计算和显示用户消息,我如何获得 maxlength,每次减 2,用户输入 æ 或 ø 或 å,并且只减一个字符,当它来自 a-z 时??

现在的脚本,允许 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
},

【问题讨论】:

  • 所有其他角色发生的事情是否无关紧要?
  • 嗨 jukka,我想有 a-zA-Z0-9æøåÆØÅ 和允许空格,所有其他字符都应该被拒绝,æøå 应该算两个字符。

标签: jquery character validation maxlength


【解决方案1】:

试试这样的:

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

【讨论】:

  • 嗨 tony,看起来像 php,还是 jquery?,我问是因为,我需要实时验证,用户不必发布,有表单来获取反馈 ??
  • @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]); return false; } } if (count &gt; 11 || count &lt; 2){ alert('String length invalid'); return false; } return true; }
  • 嘿,每个人都很好,但是现在,它正在显示,一个警告框,我如何将该脚本合并到一个新的 jQuery.validator.addMethod 中,以便我可以将其输出为 maxlength ??
  • 嘿,再一次,toni 和 ojovirtual,我这样写了我的代码,它工作得很好,谢谢你的帮助。 jQuery.validator.addMethod("maxtext", function(value, element) { var count=0; for (var i in value) { if (value[i].match(/[æøåÆØÅ]/)) count +=2; else if (value[i].match(/[a-zA-Z0-9 ]/i)) count++; else { alert('empty fields and special, is not allowed '+value[i]); return false; } } if (count &gt; 11 || count &lt; 2){return false; } return true; }, "recipients name is to long!" );
【解决方案2】:

您需要先对其进行编码。

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了解更多信息。

【讨论】:

  • 这是正确的方法,因为它甚至适用于未明确要求的字符。 (假设编码实际上是 UTF-8,但这听起来很可能。)要获得完整的答案,您应该扩展该代码以实际计算编码结果的长度......
【解决方案3】:

您可以使用正则表达式来做到这一点:

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

str.length = 55
total = 60

【讨论】:

    猜你喜欢
    • 2011-10-29
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-11-13
    • 2018-01-28
    • 2021-04-19
    • 2012-05-31
    • 1970-01-01
    相关资源
    最近更新 更多