使用 replace 删除正则表达式匹配中不存在的字符

use replace to remove chars not existing in a regex match

我正在尝试使用 javascript 正则表达式

允许单个 html 输入框遵循以下模式

我使用这个函数删除任何不匹配的东西

    $('.dointcheck').live('keyup',
        function () {
            $(this).val($(this).val().replace((/^((?!:([1-9-]?[0-9])).)/g), ''));
            if ($(this).val().length == 0) {
                $(this).val(0);
            }
        }); 

这是行不通的。 其他例子是:

  1. /[^-0-9]/g 它会删除所有无效字符,但不会检查减号是否为开头且后跟零。它允许在字符串中的任何地方减号
  2. (/^((?!:([1-9-]?[0-9])).)/g 不允许 none.
  3. [^1-9-]?[^0-9]* 允许所有...

我想我遗漏了一些东西..任何建议将不胜感激..

我更改了您的正则表达式并使其更加模块化并且运行良好。

function toValidNumber(int) {
  return (/^\s*[+-]?(\d+|\d*\.\d+|\d+\.\d*)([Ee][+-]?\d+)?\s*$/).test(int) ? int : 0;
}

$('.dointcheck').live('keyup',
  function () {
    $(this).val(toValidNumber($(this).val()));
  }); 

Orginal RegEXP in Whosebug

您可以试试这个正则表达式

^(0).*|^(-?)([1-9]\d*)?.*|^.*

输入

后替换为</code> <p><div class="snippet" data-lang="js" data-hide="false" data-console="true" data-babel="false"> <div class="snippet-code"> <pre><code>document.querySelector('input').addEventListener('input', ({ target }) => target.value = target.value.replace(/^(0).*|^(-)?([1-9]\d*)?.*|^.*/g, ''));
<input />

它有三个测试:

^(0).*               // if it starts with 0, discard everything after it
^(-)?([1-9]\d*)?.*   // otherwise it can only starts with a -, or any number that is not a 0. Then followed by other digits, then discard everything after it
^.*                  // if previous rules are not matched, discard everything

简而言之: