Javascript 只允许数字和数字之间的单个催眠

Javascript 只允许数字和数字之间的单个催眠,javascript,jquery,regex,Javascript,Jquery,Regex,我不熟悉正则表达式。我正在寻找/搜索一个只允许在数字之间进行一次炒作的限制。我找到了一个正则表达式的示例公式,但我不知道为什么我下面的代码仍然接受一个字符 我想要达到的是 输出 1-1 差不多吧 $('#txt')。按键(函数(){ 常量exp=/^\d{1,2}(-\d{1,2})$/; const el=$(本); 如果(exp.test(el.val())==true) 警报(“a”); }); 您的正则表达式没有问题,但不应该使用按键事件作为触发器,它总是在实际输入任何内容之前触发。改

我不熟悉
正则表达式
。我正在寻找/搜索一个只允许在数字之间进行一次炒作的限制。我找到了一个正则表达式的示例公式,但我不知道为什么我下面的代码仍然接受一个字符

我想要达到的是

输出

1-1

差不多吧

$('#txt')。按键(函数(){
常量exp=/^\d{1,2}(-\d{1,2})$/;
const el=$(本);
如果(exp.test(el.val())==true)
警报(“a”);
});

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

$('#txt')。在('input',function(){
常量exp=/^\d{1,2}(-\d{1,2})$/;
const el=$(本);
//替换任何不是数字或连字符的内容

el.val(el.val().replace(/[^\d-]|)(?下面的正则表达式应该可以做到这一点:

const exp=/^\d+-\d+$/g;
常量test1='1-1';
常量test2='1%2';
常量test3='1-a';
常量test4='1234-8754332';
常量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
对不起。但我想实现的是数字和连字符只允许encode@TrafDeLaw然后你应该替换任何不是数字或
-
,检查更新的答案。@Traffelaw修复了这个问题