在正则表达式javascript中仅排除0

时间:2016-09-27 10:10:16

标签: javascript regex

我想创建一个正则表达式,它将采用一到十个数值但如果只提供0则不应接受

例如

1 is valid input
1111123455 is valid input but
0000 is not valid input
0 is also not valid input
0000000000 is also not valid input 

我试过正则表达式

^([0-9]{1,10}|)$

接受10个数字但如何只避免0个

3 个答案:

答案 0 :(得分:5)

您可以使用否定前瞻:

^(?!0+$)[0-9]{1,10}$

请参阅regex demo

详细

  • ^ - 字符串开头
  • (?!0+$) - 不允许在字符串
  • 结尾处使用零
  • [0-9]{1,10} - 1到10位数字
  • $ - 字符串结束。

注意:要同时允许空值,请在限制量词中使用0作为min参数:

^(?!0+$)[0-9]{0,10}$
              ^

请参阅How Negative Lookahead Worksmore here),详细了解(?!0+)在此模式中的工作原理。简而言之:在字符串的开头,我们检查整个字符串是否为零。如果在字符串开始后正好有零或更多,则匹配失败。否则,匹配1(或0)到10位数,并返回结果。

答案 1 :(得分:0)

你可以用这样的数字函数来检查它。不需要正则表达式。

var str = '10001';
console.log(Boolean(Number(str))); This returns true if string does not contain only zeros and false if string contains only zeros

答案 2 :(得分:0)

您可以将正则表达式用作:^

Explaination

  

(?=.*[1-9])在字符串

的开头断言位置      

\d{1,10}肯定前瞻 - 断言下面的正则表达式可以是   匹配。*匹配任何字符(换行除外)量词:*   在零和无限次之间,尽可能多次给予   根据需要回来[贪心]

     

[1-9]匹配1-9 a下面列表中的单个字符   单个字符,范围在1到9之间

     

$匹配数字[0-9]量词:{1,10} 1到10之间   时间,尽可能多次,根据需要回馈[贪心]

     

console.log("1".match(/^(?=.*[1-9])\d{1,10}$/)); console.log("1111123455".match(/^(?=.*[1-9])\d{1,10}$/)); console.log("0000".match(/^(?=.*[1-9])\d{1,10}$/)); console.log("0".match(/^(?=.*[1-9])\d{1,10}$/)); console.log("0000000000".match(/^(?=.*[1-9])\d{1,10}$/));断言字符串末尾的位置



{{1}}