JS - 正则数字没有前导零,或者只是零

时间:2017-12-20 22:28:12

标签: javascript regex

我正在尝试为货币写一个正则表达式(没有逗号或$符号或句点;只是整数),但我正在打一堵墙。

我需要一个数字(作为字符串)来匹配要验证的模式。

以下是我的需要:
1.数字可以是单个零 2.数字不能有前导零

有效输入: 0 12345 1230

无效: 00 012345

到目前为止我所拥有的:



var regex = '^(?!00)([1-9][0-9]*)$';

var testCases = ['0', '12345', '0123', '456', '12340', '00123'];

for (var i in testCases) {
  var result = (testCases[i]).match(new RegExp(regex));
  
  var div = document.createElement('div');
  var textNode = document.createTextNode(testCases[i] + ': ' + !!result);
  div.append(textNode);
  document.querySelector('#results').appendChild(div);
}

<div id='results'></div>
&#13;
&#13;
&#13;

唯一缺少的(我觉得)是传递唯一的0个案例

1 个答案:

答案 0 :(得分:1)

使用以下正则表达式:

/^(?:[1-9][0-9]*|0)$/

<强>详情

  • ^ - 字符串开头
  • (?: - 替换组的开始:
    • [1-9][0-9]* - 从19的数字,然后是任意0+数字
    • | - 或
    • 0 - 0
  • ) - 小组结尾
  • $ - 字符串的结尾。

请参阅regex demo

JS演示:

&#13;
&#13;
var regex = /^(?:[1-9][0-9]*|0)$/;
var testCases = ['0', '12345', '0123', '456'];
for (var i in testCases) {
  var result = regex.test(testCases[i]); 
  console.log(testCases[i] + ': ' + result);      
}
&#13;
&#13;
&#13;