我想用js从字符串中删除无效字符。
我的正则表达式目前如下:
var newString = oldString.replace(/([^a-z0-9 ]+)/gi, '');
即找到除az或0-9以外的任何内容以及与套管无关的空格并替换为空 - 但我还想允许下划线(_
),连字符(-
)和点({{ 1}})。
我尝试更新我的正则表达式如下所示,但它没有按预期工作 - 在我做了更改后,我发现带括号()的字符串没有被剥离?
.
我错过了一些简单的东西吗?
答案 0 :(得分:5)
var newString = oldString.replace(/([^a-z0-9 ._-]+)/gi, '');
^^
将-
放在最后,因为它在[]
之间形成一个范围。现在它形成了.
和_
之间的范围。或者你也可以逃脱它。
var newString = oldString.replace(/([^a-z0-9 ._\-]+)/gi, '');
答案 1 :(得分:0)
你必须逃避点和连字符:
var newString = oldString.replace(/([^a-z0-9 \.\-_]+)/gi, '');
答案 2 :(得分:0)
将文字短划线放在字符类的最后,或者使用反斜杠将其转义。现在,它允许.
到_
的ASCII范围。
var newString = oldString.replace(/[^a-z0-9 ._-]+/gi, '');
旁注:你不需要括号,除非你为某些东西存储匹配(如果括号覆盖整个匹配,你也不需要它们,因为{{1} }指整个比赛)。
答案 3 :(得分:0)
使用反斜杠来逃避。 - _
这应该有效
.replace(/([^a-z0-9 \.\_\-]+)/gi, '');
... ALSO 你也可以使用\ w来表示字母数字和不显眼的
[a-zA-Z0-9_] == \w