【问题标题】:Jquery custom validation non numericJquery自定义验证非数字
【发布时间】:2012-04-25 08:23:59
【问题描述】:

我正在尝试为 jquery 编写一个自定义验证函数。规则应该是该字段不能只是数字。我知道如何只写数字或只写字母,但我希望规则说“12345”的值会失败,但会验证“12345A”

这就是我对非数字的理解

jQuery.validator.addMethod("nonNumeric", function(value, element) {
    return this.optional(element) || !value.match(/[0-9]+/);
},"Only alphabatic characters allowed.");

但我不知道如何只做数字。


工作脚本

这里有三个可能有用的规则,最后一个是回答这个问题的规则。

 jQuery.validator.addMethod("noSpace", function(value, element) { 
    return value.indexOf(" ") < 0 && value != ""; 
}, "No spaces please");

jQuery.validator.addMethod("alpha", function(value, element) {

    return this.optional(element) || /^[a-z]+$/i.test(value);
},"Letters only please.");

jQuery.validator.addMethod("nonNumeric", function(value, element) {
    return this.optional(element) || isNaN(Number(value));
},"String cannot be numeric");

【问题讨论】:

  • 如果我理解正确,您希望该值至少包含一个数字和一个字母字符?
  • 基本上不是用户名字段,但我不希望用户输入一个整数来尝试模仿用户标识。所以它至少需要一个字母字符,它不能都是数字。

标签: javascript regex validation jquery-validate


【解决方案1】:

像这样使用parseInt(如果操作数不是严格意义上的数字,则返回 NaN):

jQuery.validator.addMethod("nonNumeric", function(value, element) {
    return this.optional(element) || !isNaN(parseInt(value));
},"Only alphabatic characters allowed.");

在这种情况下不要使用!=,否则你可能会使用this unpleasant situation。


根据 Ken Browning 的评论,parseInt 在这里可能不合适。试试这个:

jQuery.validator.addMethod("nonNumeric", function(value, element) {
    return this.optional(element) || !isNaN(Number(value));
},"Only alphabatic characters allowed.");

【讨论】:

  • parseInt 在这里可能不合适:​alert(!!​parseInt('3x'))​​​​​​​​
  • 嗯,没错,我会用另一个选项编辑。我不是 100% 肯定的,但 Number 应该可以解决问题。不能在这里拉双不花招。 :p
  • 我认为如果至少有一个字符是按字母顺序排列的,OP 希望输入有效..,但我不确定。顺便说一句,您不能使用比较运算符针对NaN 进行测试,请使用isNaN()。
  • @FelixKling:是的,这就是它的作用,除非我以某种方式颠倒了我的逻辑并且只有在输入无效时才会返回,因为如果Number(value) 等于 NaN,则意味着某处有一个字母.
  • 嗯……现在我明白了……我可能会使用类似/[a-z]/.test(value) 的东西。或使用!isNaN(+value)。
【解决方案2】:

你可以使用

/[a-z]/i.test(value)

如果 value 包含 a 和 z 之间的任何字母,则返回 true。

i 修饰符使测试不区分大小写。

有关.test() 的更多信息,请查看MDN documentation。

【讨论】:

    【解决方案3】:

    把你的正则表达式改成这样:

    (/.*[a-zA-Z]+.*/)
    

    在您的代码上:

    编辑 1:

    jQuery.validator.addMethod("nonNumeric", function(value, element) {
        return this.optional(element) || value.match(/.*[a-zA-Z]+.*/);
    },"Only alphabatic characters allowed.");
    

    【讨论】:

      【解决方案4】:

      我认为这个正则表达式应该足够了

      /[a-z]/i.test(value);
      

      用法

      jQuery.validator.addMethod("nonNumeric", function(value, element) {
          return this.optional(element) || !(/[a-zA-Z]/i.test(value));
      },"Only alphabatic characters allowed.");
      

      【讨论】:

      • 如果你使用i修饰符,你就不需要A-Z......这就是它的全部意义;)
      • 这对非 ascii 字符没有帮助
      猜你喜欢
      • 1970-01-01
      • 2013-03-02
      • 1970-01-01
      • 2014-12-24
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2023-04-09
      相关资源
      最近更新 更多