- 和 - 或'之间的区别和'或'和"

时间:2016-07-05 19:42:05

标签: regex validation unicode

我正在尝试验证字符串字段以检查某些字符,如果存在任何字符则引发错误。这是我正在使用的正则表达式:

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个字符的验证?

1 个答案:

答案 0 :(得分:0)

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

首先,charcter类中的|-–表示从|的范围。这涵盖了8087个不同的Unicode代码点 - 显然不是你想要的。与Including a hyphen in a regex character bracket?以及其他一些相关问题一样,这可以通过将-移至最后或将其作为\-转发来解决。

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

你的最终正则表达式如下:

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

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