2017-01-16 276 views
0

我已经搜索了几个小时,但找不到这个,请帮助。我需要一个Javascript正则表达式来验证将包含数量值的文本字段。该值可以是零或任何大于零的整数。数字不能以零开始,除非它们为零。如果数量“字符串”的开始,中间或结尾处有空格,则不应匹配。Javascript正则表达式匹配数字零或任何大于零的整数

换句话说:“0”< - 应该匹配。 “467”< - 应该匹配。 “098”< - 不应该匹配。 “1 3”< - 不应该匹配。

到目前为止,我必须使用两个Reg Exps,或者在Javascript中使用它们。这是工作。这是我的代码:

function qtyIsValid(strQty){ 
    var isValid; 
    var reg1 = new RegExp('^0{1}$'); // <-- This matches a single ZERO and fails if any whitespace anywhere 
    var reg2 = new RegExp('^[1-9]+$'); // <-- This matches any number greater than zero and fails if any whitespace anywhere 

    if (reg1.test(strQty) || reg2.test(strQty)){ 
      isValid = true; 
    }else{ 
      isValid = false; 
     } 
return isValid; 
} 

但是,这两个正则表达式可以合并到一个Javascript中吗?

谢谢。

+1

你可以使用'parseInt函数(strQty)> = 0 && parseInt函数(strQty)的ToString()== strQty' –

+1

作为含蓄说@JaromandaX,因为你在乎*值*你匹配的数字,你最好把它转换成一个整数。 – math2001

+0

我在我的代码中尝试了你的建议。虽然这不使用Reg Exp,但它是一个很好的解决方案,可以满足我的需求。它捕获空格,非数字字符和以零开头的数字。真棒。 – user1816113

回答

1

您可以使用此例如:

r = /^(0|[1-9]\d*)$/ 
 
console.log("0".match(r)); 
 
console.log("467".match(r)); 
 
console.log("098".match(r)); 
 
console.log("1 3".match(r));

+0

谢谢!这Reg表达做了我所需要的。我无法弄清楚如何在表达式中实现OR,但我想我现在从你的解决方案中明白了。 – user1816113

+0

不客气,很高兴我能帮到你! – Dekel

0

/^(0+|[1-9]\d*)$/这仅仅是一个0序列或包含许多不等于0,而不是与0启动任何字符串。

console.log("0: ", /^(0+|[1-9]\d*)$/.test("0")); 
 
console.log("000: ", /^(0+|[1-9]\d*)$/.test("000")); 
 
console.log("055: ", /^(0+|[1-9]\d*)$/.test("055")); 
 
console.log("123: ", /^(0+|[1-9]\d*)$/.test("123")); 
 
console.log("1 3: ", /^(0+|[1-9]\d*)$/.test("1 3"));

+0

感谢您的解决方案。它不能像我所需要的那样工作,因为 - > 0+ < - 我想它应该是 - > 0 < - 。我要求的解决方案不允许任何数字前面加零,而您的解决方案允许使用00.但您的解决方案有助于我更好地理解Reg Exps,所以谢谢。 – user1816113

+0

不客气!我只是认为'00 ... 00'将是有效的,因为它全部是零。 –

相关问题