如何忽略/允许 Javascript 替换正则表达式中的多个换行符
How to ignore / allow multiple line breaks in a Javascript replace regex
我想做的是在模糊时清理输入字段。我的模糊代码完全可用,但我无法让正则表达式正常工作。除了任意数量的换行符外,我尝试允许的所有字符都可以正常工作。我尝试了不同的变体和组合,包括 /s、/r 和 /n。
我这样做是因为我想尽可能多地阻止不属于描述性输入字段的字符。我正在使用 entity to linq 进行数据库输入,这应该可以保护我免受 sql 注入攻击,但我仍然想限制字符以增加安全性。我允许使用撇号,但这应该是下面正则表达式中列出的允许字符的唯一潜在威胁。
获得正则表达式后,我还将使用相同的代码块替换粘贴。
这是我恢复到的 javascript 方法。
function CleanSentenceInput(AlphaNumString) {
input = AlphaNumString;
var CleanInput = input.replace(/[^a-z0-9\s.,;:'()-]/gi, '');
CleanInput = myTrim(CleanInput);
return CleanInput;
}
有没有办法通过修改这个替换正则表达式来允许任意数量的换行符?
测试输入:
aaaaaaaaaaaaaaa
bbbbbbbbbbbbbbbb
cccccccccccccccc
cccccccccccccccc
测试结果:
aaaaaaaaaaaaaaa
bbbbbbbbbbbbbbbbcccccccccccccccccccccccccccccccc
预期结果:
aaaaaaaaaaaaaaa
bbbbbbbbbbbbbbbb
cccccccccccccccc
cccccccccccccccc
更新 ** 事实证明,我使用的 trim 函数正在删除换行符。这是该函数:
错误的 trim 函数:
function myTrim(x) {
return x.replace(/^\s+|\s+$/gm, '');
}
有没有办法修复此正则表达式,使其仍然替换前后的空格,但不替换内容内部的空格?
已更新 **
好Trim功能:
function myTrim(x) {
return x.replace(/^\s+|\s+$/g, '');
}
正如我从一开始就指出的那样,问题不在于正则表达式,因为
/[^a-z0-9\s.,;:'()-]/gi
匹配空格以外的字符(字符 class 中的其他字符)。
在 MyTrim
中,您需要删除 m
,否则,$
将被视为 行 结尾,而 ^
作为 line 开始锚点,实际上你只想 trim 字符串的开头和结尾:
function myTrim(x) {
return x.replace(/^\s+|\s+$/g, '');
}
也可以使用trim()
(所有现代浏览器都支持,IE9应该已经支持了)。
我想做的是在模糊时清理输入字段。我的模糊代码完全可用,但我无法让正则表达式正常工作。除了任意数量的换行符外,我尝试允许的所有字符都可以正常工作。我尝试了不同的变体和组合,包括 /s、/r 和 /n。
我这样做是因为我想尽可能多地阻止不属于描述性输入字段的字符。我正在使用 entity to linq 进行数据库输入,这应该可以保护我免受 sql 注入攻击,但我仍然想限制字符以增加安全性。我允许使用撇号,但这应该是下面正则表达式中列出的允许字符的唯一潜在威胁。
获得正则表达式后,我还将使用相同的代码块替换粘贴。
这是我恢复到的 javascript 方法。
function CleanSentenceInput(AlphaNumString) {
input = AlphaNumString;
var CleanInput = input.replace(/[^a-z0-9\s.,;:'()-]/gi, '');
CleanInput = myTrim(CleanInput);
return CleanInput;
}
有没有办法通过修改这个替换正则表达式来允许任意数量的换行符?
测试输入:
aaaaaaaaaaaaaaa
bbbbbbbbbbbbbbbb
cccccccccccccccc
cccccccccccccccc
测试结果:
aaaaaaaaaaaaaaa
bbbbbbbbbbbbbbbbcccccccccccccccccccccccccccccccc
预期结果:
aaaaaaaaaaaaaaa
bbbbbbbbbbbbbbbb
cccccccccccccccc
cccccccccccccccc
更新 ** 事实证明,我使用的 trim 函数正在删除换行符。这是该函数:
错误的 trim 函数:
function myTrim(x) {
return x.replace(/^\s+|\s+$/gm, '');
}
有没有办法修复此正则表达式,使其仍然替换前后的空格,但不替换内容内部的空格?
已更新 **
好Trim功能:
function myTrim(x) {
return x.replace(/^\s+|\s+$/g, '');
}
正如我从一开始就指出的那样,问题不在于正则表达式,因为
/[^a-z0-9\s.,;:'()-]/gi
匹配空格以外的字符(字符 class 中的其他字符)。
在 MyTrim
中,您需要删除 m
,否则,$
将被视为 行 结尾,而 ^
作为 line 开始锚点,实际上你只想 trim 字符串的开头和结尾:
function myTrim(x) {
return x.replace(/^\s+|\s+$/g, '');
}
也可以使用trim()
(所有现代浏览器都支持,IE9应该已经支持了)。