我想创建一个正则表达式,它将采用一到十个数值但如果只提供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个
答案 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 Works(more 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)
您可以将正则表达式用作:^
的开头断言位置
(?=.*[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}}