javascript - 使用knockoutjs验证输入文本框是否包含非英语字符的自定义规则

标签 javascript knockout.js

我正在开发一个使用 MVC 3 和 knockoutjs 库的应用程序。我也在研究 knockout 验证插件。我需要验证允许符号的输入文本值。据我所知,这些没有原生规则,所以我必须创建一个自定义规则。不好的是我对正则表达式和javascript的了解很差。我需要编写一个自定义函数来验证文本框输入字段并且不允许使用非英语字符。所有其他符号都是允许的。我想我将能够创建自定义规则,但我需要验证输入字段的正则表达式。任何有关工作示例的帮助将不胜感激。谢谢!

最佳答案

does not allow non-english characters

All the other symbols are permitted

这对我来说似乎很矛盾,但我会尽力提供帮助:)

首先,您应该考虑使用 Ajax 进行验证,因为服务器端语言通常对 Unicode 有更好的支持。如果这不是一个选项,那么首先添加 XRegExp图书馆 Unicode plugin到您的页面。

要创建支持 Unicode 的正则表达式,请使用以下形式:

var englishLettersOrSymbols = XRegExp('[\\p{^Letter}\\p{Latin}]*');

这里我们说我们接受零个或多个 (... *) 符号,并且每个符号都是 ([ ... ]) 非字母 (\\p{^Letter}) 或基本拉丁字母表中的字母 (\\p{Latin})。

现在您的自定义验证规则将如下所示:

ko.validation.rules['englishLettersOrSymbols'] = {
    validator: function(value){
        var rule= XRegExp('[\\p{^Letter}\\p{Latin}]*');
        return rule.test(value);
    },
    message: 'Sorry, {0} this is not valid'
};

您可以在代码中使用它,如下所示:

var vewModel = {
    // ...
    myField: ko.observable().extend({englishLettersOrSymbols: true}),
    // ...
};

编辑:从正则表达式中删除了|。谢谢,@slevithan 。这本身并不是一个错误,因为 \\p{^Letter} 已经包含 | 符号,因此,正则表达式仍然会工作。然而,这是相当误导的。

关于javascript - 使用knockoutjs验证输入文本框是否包含非英语字符的自定义规则,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/10583896/

相关文章:

javascript - 如何根据迭代次数获取控件?

javascript - 带有 knockout 绑定(bind)的嵌套 foreach ?

javascript - 如何在同一元素上的 'click' 和 'double click' 上调用单独的函数

knockout.js - Knockout 在 html 中使用美元符号 - 还有其他选择吗?

javascript - 更新 observableArray 不会更新 UI

javascript - 有谁知道 IE 中带有 html 选择框的 jQuery 选择器的问题吗?

javascript - `string.replace` 使用美元符号 ($) 作为替换时出现奇怪的行为

javascript - 当进度条达到100%时如何重定向url

javascript - 尝试使用 id 访问数据时,firebase 规则中的通配符不起作用

javascript - KnockOut 的计算函数问题