javascript - 如何忽略/允许 Javascript 中的多个换行符替换正则表达式

标签 javascript regex replace line-breaks carriage-return

我想做的是清理模糊的输入字段。我的模糊代码完全可用,但我无法让正则表达式正常工作。除了任意数量的换行符外,我尝试允许的所有字符都可以正常工作。我尝试了不同的变体和组合,包括/s、/r 和/n。

我这样做是因为我想尽可能多地阻止不属于描述性输入字段的字符。我正在使用 entity to linq 进行数据库输入,这应该可以保护我免受 sql 注入(inject)攻击,但我仍然想限制字符以增加安全性。我允许使用撇号,但这应该是下面正则表达式中列出的允许字符的唯一潜在威胁。

获得正则表达式后,我还将使用相同的代码块替换粘贴。

这是我恢复到的 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

匹配除空格以外的字符(字符类中的其他字符)。

MyTrim 中,您需要删除 m,否则 $ 将被视为 line 结束和 ^ 作为 line 开始 anchor ,实际上您只想从开头和结尾 trim 字符串:

function myTrim(x) {
    return x.replace(/^\s+|\s+$/g, '');
}

也可以使用 trim() (所有现代浏览器都支持,IE9应该已经支持了)。

关于javascript - 如何忽略/允许 Javascript 中的多个换行符替换正则表达式,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/32250865/

相关文章:

python - 使用正则表达式查找段落中出现特定短语后的所有名词短语

php - file_get_contents( - 修复相对 url

python - 有效地在字符串中进行多次替换

xml - 通过Powershell搜索/替换XML

javascript - 使用 JavaScript 淡化 Div

javascript - Scrollreveal.js 在调整窗口大小时向网站添加神秘的填充/空间

ios - iOS 中密码字段的字母数字验证

javascript - Nodejs writestream 内存使用情况

javascript - 试图让图钉在我的鼠标之后移动

Objective-C 字符串替换