【问题标题】:how to replace all the periods after the first of a string with the javascript replace function?如何用javascript替换函数替换字符串第一个之后的所有句点?
【发布时间】:2020-11-06 00:33:14
【问题描述】:

您好,我正在尝试(替换)以省略开头输入的字母和分号,这已经过验证,但除此之外,我需要您不要让我在输入第二个句点后输入它,我希望你能帮助我:

我的代码: (我正在使用onInput方法来捕获输入)

ev.target.value=ev.target.value.replace(/[a-z]|^[,.]/, '').replace('..', '.')

例如:

111.11         //ok
111.1.1        //x
11.11.11       //x
1.1           //ok
11.11.11.11   //x

【问题讨论】:

  • 您是否要阻止用户进入第二个时段?所以我可以做 1.111111111 但我可以做 1.111.111。因此,如果我要添加第二个周期,您是要返回错误还是只是切断输入?还是您接收整个字符串并删除第一个之后的所有句点?
  • 与其阻止用户输入某些字符,不如让他们输入,然后在输入失去焦点或用户尝试提交数据时提醒他们输入无效。当直接调整他们的输入时,用户可能会认为他们的键盘坏了或者发生了什么奇怪的事情。

标签: javascript reactjs regex replace


【解决方案1】:

您可以匹配要删除的内容,并使用捕获组来保留要保留的内容。

在替换使用组1中。

^\D*(\d+[.,]?\d*)?.*
  • ^ 字符串开始
  • \D* 匹配除应删除的数字之外的任何字符。
  • ( 捕获第 1 组
    • \d+[.,]?\d* 匹配 1+ 个数字,可选 ,. 和可选数字
  • )? 关闭组并使其成为可选
  • .* 匹配后面应删除的任何字符

Regex demo

这样,输入也不能只包含点或逗号。

const regex = /^\D*(\d+[.,]?\d*)?.*/;
const input = document.getElementById("myInput");
const updateValue = ev => ev.target.value = ev.target.value.replace(regex, "$1")
input.addEventListener('input', updateValue);
<input type="text" id="myInput">

【讨论】:

    【解决方案2】:

    你可以试试这个正则表达式:

    /[^\d.,]|(?<=[.,].*)[.,]/g
    

    这是一个例子:

    const input = document.querySelector('input');
    
    input.addEventListener('input', () => {
      input.value = input.value.replace(/[^\d.,]|(?<=[.,].*)[.,]/g, '');
    });
    &lt;input type="text" /&gt;

    不知道句号是什么,我认为这是小数点的另一种格式。

    【讨论】:

      【解决方案3】:

      您可以将函数作为第二个参数传递给replace()。我创建了一个count 变量,该变量会随着找到的每个匹配项而递增。第一个匹配是0,这是一个fasly值,之后它会是真的。

      const input = document.querySelector('input');
      
      input.addEventListener("change", () => {
        let count = 0;
        input.value = input.value.replace(/[.]/g, (match) => count++ ? '' : match);
      });
      kbd{background-color:#eee;border-radius:3px;border:1px solid #b4b4b4;box-shadow:0 1px 1px rgba(0, 0, 0, .2), 0 2px 0 0 rgba(255, 255, 255, .7) inset;color:#333;display:inline-block;font-size:0.85em;font-weight:700;line-height:1;padding:2px 4px;white-space:nowrap}
      &lt;input type="text" /&gt; (press &lt;kbd&gt;Enter&lt;/kbd&gt; to fire event)

      【讨论】:

        猜你喜欢
        • 2018-10-05
        • 2015-04-14
        • 1970-01-01
        • 1970-01-01
        • 2011-01-24
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多