Knockout Js Regex没有负数

时间:2017-07-26 01:59:07

标签: regex knockout.js

我正在尝试找到一个正则表达式代码来禁用用户输入的负数。 我正在玩代码abit试图找到合适的代码,但没有取得多大成功。

我目前的代码是:

Price: ko.observable().extend({
        required: true,
        pattern: '^[0-9].$'
    })

2 个答案:

答案 0 :(得分:0)

您可以使用数字组\ d

pattern: '^\d+\.?$'

符合以下条件:

  • 该号码必须从该行的开头
  • 开始
  • 必须包含一个或多个数字
  • 可以拥有角色"。" 0或1次
  • 该号码必须在该行的末尾结束

以下是一些匹配示例:" 34"," 5"," 45687654"," 1。",&# 34; 198289"

我注意到你说你想避免负数,你的解决方案是将数字压缩到行的开头和结尾。您还可以使用负向lookbehind来检查该数字是否没有负号,例如

pattern: '(?<!-)\b\d+\.?'

我还添加了一个单词边界检查(\b),这样就不会尝试匹配-123中的23

答案 1 :(得分:0)

在这种情况下,为什么您需要允许用户在输入字段中输入减号并根据负数验证输入?

相反,您可以阻止用户输入负数/字符串。

这使用JavaScript,但您不必编写自己的验证例程。而只需检查validity.valid属性。当且仅当输入在范围内时才会出现这种情况。

解决方案1:

&#13;
&#13;
<html>
<body>
<form action="#">
  <input type="number" name="test" min=0 oninput="validity.valid||(value='');">
</form>
</body>
</html>
&#13;
&#13;
&#13;

解决方案2:

以下解决方案支持验证多个输入。

&#13;
&#13;
// Select your input element.
var numInput = document.querySelector('input');

// Listen for input event on numInput.
numInput.addEventListener('input', function(){
    // Let's match only digits.
    var num = this.value.match(/^\d+$/);
    if (num === null) {
        // If we have no match, value will be empty.
        this.value = "";
    }
}, false)
&#13;
<input type="number" min="0" />
&#13;
&#13;
&#13;

解决方案3:

我还没有测试过以下的解决方案,但这也有帮助......

'/^\d+$/''^\d+$'模式可以帮助您实现当前的方法。

Price: ko.observable().extend({
        required: true,
        pattern: '/^\d+$/'
    })

Original Solution and Reference here ..

希望这会有所帮助......