Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/454.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/xslt/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript 筛选此正则表达式中的字符_Javascript_Regex - Fatal编程技术网

Javascript 筛选此正则表达式中的字符

Javascript 筛选此正则表达式中的字符,javascript,regex,Javascript,Regex,我有一个正则表达式来匹配一个有效的名称:/^['“\s\-.*0-9\u00BF-\u1ff\u2C00-\uD7FF\w]+$/.test(名称) 我很难弄清楚如何将这个匹配样式的正则表达式转换成一个设计用于使用replace过滤无效字符的正则表达式 理想情况下,我希望能够在name中获取一个无效名称,在replace中运行它以替换任何无效字符,然后让原始测试返回true(因为无效字符将被过滤掉)。只需通过在前面添加^来使用一个否定字符类: name.replace(/[^'"\s\-.*0-

我有一个正则表达式来匹配一个有效的名称:
/^['“\s\-.*0-9\u00BF-\u1ff\u2C00-\uD7FF\w]+$/.test(名称)

我很难弄清楚如何将这个匹配样式的正则表达式转换成一个设计用于使用
replace
过滤无效字符的正则表达式


理想情况下,我希望能够在
name
中获取一个无效名称,在
replace
中运行它以替换任何无效字符,然后让原始测试返回true(因为无效字符将被过滤掉)。

只需通过在前面添加
^
来使用一个否定字符类:

name.replace(/[^'"\s\-.*0-9\u00BF-\u1FFF\u2C00-\uD7FF\w]/g, "")
例如:

var name = "'41%!\u2000abc";
var sanitized = name.replace(/[^'"\s\-.*0-9\u00BF-\u1FFF\u2C00-\uD7FF\w]/g, "");
console.log(/^['"\s\-.*0-9\u00BF-\u1FFF\u2C00-\uD7FF\w]+$/.test(name)); // false
console.log(/^['"\s\-.*0-9\u00BF-\u1FFF\u2C00-\uD7FF\w]+$/.test(sanitized)); // true
结尾的
+
告诉您匹配括号内至少1个或多个类型的字符。开头的
^
和结尾的
$
告诉您匹配从开始到结束的整个输入。因此给定的正则表达式匹配一个仅由集合中的字符组成的字符串

你想要的是:

/[^'"\s\-.*0-9\u00BF-\u1FFF\u2C00-\uD7FF\w]/g

[^]
表示不匹配括号内的内容,与
[]相反

为什么要运行替换,只需将正则表达式严格限制为您希望允许的字符..基于@hwnd的注释,您的有效字符是什么?或者,如果更简单,您的无效字符是什么?使用两个常规exp,一个查找部分正确的名称,一个修复名称。回调是您真正需要的。如果JS无法做到这一点,您可以使用必须坐在一个循环中,自己重建字符串。哦,等等,这不是字符串。。。
/[^'"\s\-.*0-9\u00BF-\u1FFF\u2C00-\uD7FF\w]/g