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

Conditionally remove special characters from a string while being typed

本文关键字:字符串 删除 特殊字符 有条件      更新时间:2023-09-26

我试图将一个函数附加到表单字段,以便-最好是当用户键入字段-我指定的特殊字符将被剥离出键入的文本。但是有一些条件:

  • 开放,允许使用右括号
  • 允许使用空格,除非是末尾的尾随空格或一行中的两个空格

我已经找到了几个如何替换字符串中的特殊或非单词字符的例子,但到目前为止还没有一个关于如何去掉我不想要的字符,或者如何仅在尾随空格时删除空格的例子。

请注意,我没有嫁给JavaScript或jQuery(反之亦然),但它需要一个或另一个。我也不喜欢在飞行中这样做,但这是更可取的选择-其他一些函数已经在下一个字段上发生,所以我宁愿在用户退出这个特定的文本框之前有适当的值。

我尝试像下面的例子一样使用多个替换,但它似乎不喜欢用什么替换字符(")。我也不确定如何编写尾随空格的条件。

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

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

  • 用户输入带句号(St.)的道路名称或缩写
  • 用户不小心按空格两次,导致双空格
  • 用户不小心在末尾点击空格,导致尾随空格

这些值在冗长的业务流程中使用,将值传递给其他字段、创建文件夹等,因此像句号、双空格和尾随空格这样的东西都会在以后把工作搞得一团糟。我试图通过在第一个字段中消除这些问题来解决这些问题。

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

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

这将删除任何包含两个或多个空格的序列、任何点和任何尾随空格。模式表达式的三个部分由| (OR)分隔,因此避免了对remove的多次调用。您还可以以^'s的形式添加前置空格的条件。

然而,这种方法是有风险的,因为:

    在飞行中这样做会让用户认为你的应用程序出了问题(想象一下你自己是一个用户,一开始你可能会认为你的键盘出了问题)。你可以不考虑文本输入,在输入失去焦点后,在附近的标签中显示规范化值。无论你使用什么后端,这种类型的清理/消毒/规范化都应该加倍。客户端验证可以通过多种方式绕过。用户在文本字段中看到的内容并不重要,更重要的是您在冗长的业务流程中实际保存和使用的内容。

因此,为用户做一个正确的客户端验证,并为您做一个正确的服务器端验证。