在键入时有条件地从字符串中删除特殊字符

时间:2015-06-05 20:20:25

标签: javascript jquery

我正在尝试将一个函数附加到表单字段,以便 - 最好在用户输入字段时 - 我指定的特殊字符将从键入的文本中删除。但是有一些条件:

  • 开幕式&允许使用右括号
  • 允许使用空格,除非它是末尾的尾随空格或连续两个空格

我发现了几个如何在事后从字符串中替换特殊字符或非字符字符的例子,但到目前为止还没有关于如何删除我不想要的字符,或者如何仅删除空格的例子当它是一个尾随空间。

请注意,我没有与JavaScript和jQuery结合(反之亦然),但它需要是一个或另一个。我也没有嫁给它在飞行中这样做,但这是更好的选择 - 下一个字段已经出现了一些其他功能,所以在用户选中此特定文本框之前,我宁愿拥有正确的值。 / p>

我试图使用多个替换,如下面的示例,但它似乎不喜欢替换任何字符(“”)。我也不确定如何为尾随空格写条件。

var s1 = "I live on Hopper St.";
var s2 = s1.replace(/\./g, "");

这主要是为了自动纠正我们看到的三个主要问题:

  • 用户输入道路名称或缩写WITH period(St.)
  • 用户意外击中空间两次,导致双倍空间
  • 用户意外撞到空间,导致尾随空格

这些值在漫长的业务流程中使用,将值传递给其他字段,创建文件夹等等。所以诸如句点,双空格和尾随空格之类的东西都会在以后的工作中搞砸。我试图通过在第一场杀死他们来解决这些问题。

1 个答案:

答案 0 :(得分:1)

使用您提供的示例严格回答您的问题:

var s2 = s1.replace(/\s{2,}|\.|\s$/g, "");

这将删除两个或多个空格,任何点和任何尾随空格的任何序列。模式表达式的三个部分由|OR)分隔,因此可以避免多次调用remove。您还可以^\s

的形式为前导空格添加条件

然而,这种方法存在风险,因为:

  1. 动态执行此操作会让用户认为您的应用程序出现了问题(想象一下您自己是一个用户,您可能会认为键盘出现问题)。您可以单独留下文本输入,并在输入失去焦点后在附近的标签中显示标准化值。
  2. 对于您使用的后端,此类清理/清理/规范化应始终加倍。可以通过多种方式绕过客户端验证。用户在文本字段中看到的内容并不重要,但更重要的是您在冗长的业务流程中实际保存和使用的内容。
  3. 因此,请为用户进行正确的客户端验证,并为您进行适当的服务器端验证。