【问题标题】:Allow only number and a single hypen between number只允许数字和数字之间的单个连字符
【发布时间】:2020-11-12 02:44:03
【问题描述】:

我是regular expression 的新手。我正在寻找/搜索只允许数字之间有一个连字符的限制。我找到了一个正则表达式的示例公式,但我不知道为什么我下面的代码仍然接受一个字符。

我想要实现的是

输出

1-1

类似的东西。

    $('#txt').keypress(function () {
        const exp = /^\d{1,2}(-\d{1,2})?$/;
        const el = $(this);
        if (exp.test(el.val()) == true)
            alert("a");
    });
<script src="https://cdnjs.cloudflare.com/ajax/libs/jquery/3.3.1/jquery.min.js"></script>
<input type="text" id="txt">

【问题讨论】:

标签: javascript jquery regex


【解决方案1】:

您的正则表达式没问题,但您不应该使用keypress 事件作为触发器,它总是在实际输入任何内容之前触发。请改用.on('input', ...)

$('#txt').on('input', function () {
    const exp = /^\d{1,2}(-\d{1,2})?$/;
    const el = $(this);
    
    // replace anything that is not a number or hyphan
    el.val(el.val().replace(/[^\d-]|(?<=^|-.*)-|(?<=\d{2,})\d/g, ''));
    
    if (exp.test(el.val()) == true)
        console.log("a");
});
<script src="https://cdnjs.cloudflare.com/ajax/libs/jquery/3.3.1/jquery.min.js"></script>
<input type="text" id="txt">

【讨论】:

  • 对不起。但我想实现的是数字和连字符只允许编码
  • @TrafDeLaw 然后你应该替换任何不是数字或-的东西,检查更新的答案。
  • @TrafDeLaw 已修复
【解决方案2】:

以下正则表达式应该可以解决问题:

const exp = /^\d+-\d+$/g;

const test1 = '1-1';
const test2 = '1%2';
const test3 = '1-a';
const test4 = '1234-8754332';
const test5 = '-5';

console.log(exp.test(test1)); // true
console.log(exp.test(test2)); // false
console.log(exp.test(test3)); // false
console.log(exp.test(test4)); // true
console.log(exp.test(test5)); // false

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2023-03-12
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-11-24
    • 1970-01-01
    • 1970-01-01
    • 2013-09-17
    相关资源
    最近更新 更多