猿问

Jquery/Javascript - 正则表达式 - 仅在 Safari 浏览器中出错

下面使用正则表达式的 JS 脚本。

  1. 只允许输入字段中的数字。

  2. 要在用户输入值中使用逗号更改货币值,例如 1,000 或 1,00,000。

下面的代码适用于除 Safari 之外的所有主要浏览器。仅在 Safari 中出现此错误。不确定如何修复此正则表达式而不影响其他工作浏览器。

SyntaxError:无效的正则表达式:无效的组说明符名称

   $('input.input-num').on('change click keyup input paste',(function (event) {

        $(this).val(function (index, value) {

            return value.replace(/(?!\.)\D/g, "").replace(/(?<=\..*)\./g, "");

        });

    }));


    $('input.input-currency').on('change click keyup input paste',(function (event) {

        $(this).val(function (index, value) {

            return value.replace(/(?!\.)\D/g, "").replace(/(?<=\..*)\./g, "").replace(/(?<=\.\d\d).*/g, "").replace(/\B(?=(\d{3})+(?!\d))/g, ",");

        });

    }));


DIEA
浏览 147回答 1
1回答

长风秋雁

您可以考虑以下更改:.replace(/(?!\.)\D/g, "")-(可选)- 由于(?!\.)\D匹配除点之外的任何非数字字符,因此将此替换定义为有意义.replace(/[^\d.]/g, "").replace(/(?<=\..*)\./g, "")- 可以重写它以匹配一个点,然后捕获它后面的所有点并删除捕获的子字符串中的所有点:.replace(/\.(.*)/, function(x) { return x.replace(/\./g, ''); }).replace(/(?<=\.\d\d).*/g, "")- 这很容易通过捕获组和替换中对其的反向引用来修复:(.replace(/(\.\d\d).*/, "$1")请注意,您不需要g,因为您只期望这里有一个替换)。
随时随地看视频慕课网APP

相关分类

JavaScript
我要回答