我正在尝试验证字符串字段以检查某些字符,如果存在任何字符则引发错误。这是我正在使用的正则表达式:
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个字符的验证?
答案 0 :(得分:0)
你的正则表达式有两部分不起作用:
首先,charcter类中的|-–
表示从|
到–
的范围。这涵盖了8087个不同的Unicode代码点 - 显然不是你想要的。与Including a hyphen in a regex character bracket?以及其他一些相关问题一样,这可以通过将-
移至最后或将其作为\-
转发来解决。
其次,”
和’
转换为"
和'
不应该出现在任何合理的文本编辑器中。使用更好的文本编辑器,获得更好的Unicode支持,或者”
替换\u201D
,’
替换\u2019
- 它们各自的Unicode十六进制代码。
你的最终正则表达式如下:
/^[^'\u2019\\\/\:*\?"\u201D<>\|–-]*$/
如果您需要它们,“
的Unicode十六进制代码为\u201C
,‘
为\u2018
,而–
为\u2013