【问题标题】:Difference between – and - or ' and ‘ or “ and "- 和 - 或'和'或“和”之间的区别
【发布时间】:2016-11-07 18:20:13
【问题描述】:

我正在尝试验证一个字符串字段以检查某些字符并在其中任何一个存在时引发错误。这是我正在使用的正则表达式:

var regex = /^[^'\\\/\:\*\?"<>\|-]*$/; // In ServiceNow 

ServiceNow平台的JavaScript代码如下:

function onChange(control, oldValue, newValue, isLoading, isTemplate) {
   if (isLoading || newValue === '') {
      return;
   }

   var regex = /^[^'\\\/\:\*\?"<>\|-]*$/;
   var ans = g_form.getValue('u_native_renaming_suffix');
    if(!regex.test(ans)){
        alert('Please enter valid string');
        return;
    }
}

它适用于所有包含的字符。但是,当使用拉长的连字符 () 或弯曲的单引号或双引号 ()(我们在 MS Word 等应用程序中找到)时,而不是正常的连字符或引号,此验证不起作用。也就是说,当使用正常的连字符或引号时,它会引发错误,但在使用拉长的连字符或弯曲引号时不会。

我什至尝试将新字符复制粘贴到正则表达式中,但它们只是被替换或视为普通字符,即:

/^[^'’\\\/\:*\?"”<>\|-–]*$/

变成

/^[^''\\\/\:*\?""<>\|-–]*$/

当我点击保存时。

如何将这 3 个字符的验证也纳入其中?

【问题讨论】:

  • 请显示您尝试复制粘贴字符的建议解决方案的代码。
  • 是的,请提供代码,因为没有使用正则表达式的上下文,很难给出具体答案
  • 我敢打赌,这将是 Including a hyphen in a regex character bracket? 的副本。
  • 这是一个用于ServiceNow平台的javascript代码。函数 onChange(control, oldValue, newValue, isLoading, isTemplate) { if (isLoading || newValue === '') { return; } var regex = /^[^'\\\/\:*\?"\|-]*$/; var ans = g_form.getValue('u_native_renaming_suffix'); if(!regex.test(ans) ){ alert('请输入有效字符串'); return; } }
  • 顺便说一句,您不需要所有这些转义:var regex = /^[^'\/:*?"&lt;&gt;|-]*$/;

标签: regex validation unicode


【解决方案1】:

您的正则表达式有两个部分不起作用:

首先,字符类中的|-– 表示从| 的范围。这涵盖了 8087 个不同的 Unicode 代码点 — 显然不是您想要的。与Including a hyphen in a regex character bracket? 和其他一些相关问题一样,这可以通过将- 移到末尾或将其转义为\- 来解决。

其次, 被转换为 "' 不应该在任何合理的文本编辑器中发生。使用更好的文本编辑器,获得更好的 Unicode 支持或将 替换为 \u201D 替换为 \u2019 — 它们各自的 Unicode 十六进制代码。

您的最终正则表达式将如下所示:

/^[^'\u2019\\\/\:*\?"\u201D<>\|–-]*$/

如果您需要它们, 的 Unicode 十六进制代码是 \u201C\u2018\u2013

【讨论】:

  • 嗨,xufox!我又遇到了类似的问题。那个 unicode 字符的东西工作得很好,但我需要改变一些东西。现在我排除了所有单引号/撇号(直引号和弯引号) 我从正则表达式中排除了直引号,但它仍在验证它。当我用双引号进行测试时,它接受了直引号并针对弯引号进行了验证。它不适用于单引号。只有“卷曲”撇号应被视为无效。所以我希望能够接受直撇号。
  • 这是我拥有但无法正常工作的代码。 (它没有直撇号,但它仍然不接受它) var regex = /^[^\\\/\:*\?"\u02BC\u055A\u201C\u201D\u201E\u201F\u2012\u2013\u2014 \u2015\u007c\|-]*$/; var ans = g_form.getValue('u_native_renaming_suffix'); if(!regex.test(ans)){ alert('请为“Native Renaming Suffix”输入有效字符串'); //g_form.clearValue('u_native_renaming_suffix'); return; }
猜你喜欢
  • 2016-04-02
  • 1970-01-01
  • 2011-09-09
  • 2012-11-05
  • 2013-08-01
  • 1970-01-01
  • 2010-11-19
  • 1970-01-01
  • 2014-09-17
相关资源
最近更新 更多