【问题标题】:Javascript to remove spaces from a textbox valueJavascript从文本框值中删除空格
【发布时间】:2011-04-27 00:26:23
【问题描述】:

我已经搜索了很多,但找不到我正在尝试做的具体示例。基本上我想通过文本框的名称(不是 id)来获取文本框的值。然后我想删除所有空格,不仅仅是前导或尾随,还有文本中的空格。例如对于这个 html 代码:

<INPUT style="TEXT-ALIGN: right;" onkeyup="fieldEdit();" onchange="fieldChange();" NAME="10010input" VALUE="4 376,73" readonly >

我有这个javascript:

var val = document.CashSheet.elements["10010input"].value; 
val2 = val.replace(<someregex>, '');
alert(val2);

但是我已经尝试了许多删除所有空格的可用正则表达式,但似乎都只删除前导和尾随空格,例如,在上面的警报中,高于 4 376,73 的值应该读为 4376,73 但它没有不。在研究了这个从文本字段内容中删除空格的正常正则表达式后,它不起作用,我相信它是因为它被填充在 Web 服务器上的波兰语本地化设置中。可以这么说,我需要为“波兰空间”捕获什么 \u char/regex exp,在 ascii 中它显示为 20,但大多数人建议用于空间的 regex exp 没有捕获它。

【问题讨论】:

    标签: javascript whitespace spaces


    【解决方案1】:

    您可以使用document.getElementsByName 获取元素而无需通过表单,只要页面中没有其他元素具有相同的名称。要替换所有空格,只需使用在元素值的replace() 方法中设置全局标志的正则表达式:

    var el = document.getElementsByName("10010input")[0];
    var val = el.value.replace(/\s/g, "");
    alert(val);
    

    【讨论】:

    • 嗨蒂姆,快速提问,我正在尝试您对文本字段内容的建议,但它不起作用,我相信这是因为它被填充在网络服务器上的波兰语本地化设置中。可以这么说,我需要为“波兰空间”捕获什么 \u char,在 ascii 中它显示为 20,但正则表达式不会捕获它,但会捕获我自己放入字符串中的其他空格。
    • 真的吗?你确定那不是十六进制的 20(正常的空格字符是十六进制的 20)吗?如果您需要指定要匹配的空格字符列表,您可以执行 new RegExp("[\\s\u1234\u4321]", "g") 之类的操作,而不是 /\s/
    • 是的,它像“4 376”一样回来,如果我在上面尝试那个正则表达式,它不会做任何事情,但是如果我在那个字符串的末尾添加“aa”,正则表达式就会生成它的输出是这样的:“4 376aa”,所以它可以在我的空间上运行,但不能在从波兰 Web 服务器返回的空间上运行。我认为它是一个不同的 Unicode 空格字符,我会尝试找到它,然后使用新的 RegExp 调用。
    • 好的,我找到了它的 \u00A0 ,所以是一个 nbsp,但需要找到一个与它匹配的正则表达式,因为 new RegExp("[\\s\u00A0]", "g") 没有工作:(
    • 真的吗? new RegExp("[\\s\u00A0]", "g").test("\u00A0"); 对我有用,包括在 IE 中(其中\s\u00A0 不匹配,违反了 ECMAScritp 规范)。
    【解决方案2】:

    您需要“概括”您正在使用的正则表达式,以便将其应用于所有匹配项,而不仅仅是第一个匹配项。像这样:

    val = val.replace(/\s/g, '')
    

    注意修改正则表达式的“g”,使其变为“通用”。

    【讨论】:

    • +1 表示\s 字符类;我可能会使用“global”而不是“general”
    • @Michael:为什么\s 比这里的空格字符要好得多? &lt;input&gt; 中不能有任何换行符,并且通常不会在文本框中输入不间断的空格。
    • @Michael Haren:我知道它以“g”开头,但我不知道它到底是哪一个。 @Tim Down:我认为 \s 更具可读性,不是吗?
    • @Abel:不知道。相当主观,我会说。这不是什么大问题,\s 在功能方面可能是更好的选择。
    • @Tim 有几十个空白字符可以粘贴,不是简单的“空格”
    【解决方案3】:

    这是我用来替换空格的函数。

    function removeSpaces(val) {
       return val.split(' ').join('');
    }
    

    【讨论】:

      【解决方案4】:

      另一个更 jQuery'ish 的选项:

      $(".stripspaces").keyup(function() {
          $(this).val($(this).val().replace(/\s/g, ""));
      });
      

      【讨论】:

      • 太多 jQuery...When to use Vanilla JavaScript vs. jQuery?.此外,此页面上的所有答案都有一个重大缺陷:通过始终设置值,插入符号总是移动到末尾,即使框中没有空间。更好的解决方案是首先检查输入的值。
      【解决方案5】:

      试试这个

      <script language="JavaScript">
      function RWS(str){
        return str.replace(/^\s+/,"").replace(/\s+$/,"").replace(/\s+/g," ");
      }
      </script>
      
      <form name=f1ex>
      <textarea name="t2" rows="5" onChange="this.value=RWS(this.value)"></textarea>
      </form>
      

      【讨论】:

        【解决方案6】:

        试试这个:- 您可以尝试写入或复制粘贴任何字符串,包括空格,它会自动删除。

        /* Not Allow Spcace Type in textbox */
        function AvoidSpace(event) {
            var k = event ? event.which : window.event.keyCode;
            if (k == 32) return false;
        }
        
        /* Remove Blank Space Automatically Before, After & middle of String */
        
        function removeSpaces(string) {
         return string.split(' ').join('');
        }
        <script src="https://ajax.googleapis.com/ajax/libs/jquery/3.3.1/jquery.min.js"></script>
        
        <form>
        <input placeholder="Enter Your Text" type="text" onkeypress="return AvoidSpace(event);" onblur="this.value=removeSpaces(this.value);">
        
        
        </form>

        【讨论】:

          【解决方案7】:

          你可以使用这个jQuery方法http://api.jquery.com/jQuery.trim/
          val = $.trim(val);val = jQuery.trim(val);

          【讨论】:

          • 这只会删除前导和尾随空格,而不是字符串中的波兰语 Unicode 空格 :(
          猜你喜欢
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 2011-10-01
          • 1970-01-01
          • 1970-01-01
          相关资源
          最近更新 更多