Javascript 匹配不可打印/非ascii字符并从文本中删除
我的JavaScript已经很生锈了,所以任何关于这方面的帮助都会很好。我需要检测不可打印字符(控制字符,如SOH、BS等)以及扩展ascii字符,如字符串中的Ž,并将其删除,但我不确定如何编写代码 有人能告诉我怎么做的正确方向吗?这就是我到目前为止所做的:Javascript 匹配不可打印/非ascii字符并从文本中删除,javascript,regex,control-characters,Javascript,Regex,Control Characters,我的JavaScript已经很生锈了,所以任何关于这方面的帮助都会很好。我需要检测不可打印字符(控制字符,如SOH、BS等)以及扩展ascii字符,如字符串中的Ž,并将其删除,但我不确定如何编写代码 有人能告诉我怎么做的正确方向吗?这就是我到目前为止所做的: $(document).ready(function() { $('.jsTextArea').blur(function() { var pattern = /[^\000-\031]+/gi; v
$(document).ready(function() {
$('.jsTextArea').blur(function() {
var pattern = /[^\000-\031]+/gi;
var val = $(this).val();
if (pattern.test(val)) {
for (var i = 0; i < val.length; i++) {
var res = val.charAt([i]);
alert("Character " + [i] + " " + res);
}
}
else {
alert("It failed");
}
});
});
$(文档).ready(函数(){
$('.jsTextArea').blur(函数(){
变量模式=/[^\000-\031]+/gi;
var val=$(this.val();
if(pattern.test(val)){
对于(变量i=0;i
您必须将一个模式(而不是字符串)分配到isNonAscii
变量中,然后使用test()
检查它是否匹配<代码>测试()返回true或false
$(document).ready(function() {
$('.jsTextArea').blur(function() {
var pattern = /[^\000-\031]+/gi;
var val = $(this).val();
if (pattern.test(val)) {
alert("It matched");
}
else {
alert("It did NOT match");
}
});
});
选中无需测试,您可以直接处理文本框内容:
textBoxContent = textBoxContent.replace(/[^\x20-\x7E]+/g, '');
其中范围\x20-\x7E
包括ascii表的可打印部分
代码示例:
$('.jsTextArea').blur(function() {
this.value = this.value.replace(/[^\x20-\x7E]+/g, '');
});
要将不属于可打印基本ASCII范围的字符作为目标,可以使用以下简单的正则表达式:
[^ -~]+
说明:在的前128个字符中,可打印范围以空格字符开始,以波浪号结束。这些是您要保留的字符。该范围用[-~]
表示,不在该范围内的字符用[^-~]
表示。这些是我们要替换的。因此:
result = string.replace(/[^ -~]+/g, "");
对于那些有此问题并正在寻找“修复所有问题”解决方案的人。。。这就是我最终修复它的方式:
public static string RemoveTroublesomeCharacters(string inString)
{
if (inString == null)
{
return null;
}
else
{
char ch;
Regex regex = new Regex(@"[^\u0000-\u007F]", RegexOptions.IgnoreCase);
Match charMatch = regex.Match(inString);
for (int i = 0; i < inString.Length; i++)
{
ch = inString[i];
if (char.IsControl(ch))
{
string matchedChar = ch.ToString();
inString = inString.Replace(matchedChar, string.Empty);
}
}
while (charMatch.Success)
{
string matchedChar = charMatch.ToString();
inString = inString.Replace(matchedChar, string.Empty);
charMatch = charMatch.NextMatch();
}
}
return inString;
}
publicstaticstringremovetroublesomecharacters(stringinstring)
{
if(inString==null)
{
返回null;
}
其他的
{
char ch;
Regex Regex=new Regex(@“[^\u0000-\u007F]”,RegexOptions.IgnoreCase);
匹配字符匹配=正则匹配(inString);
对于(int i=0;i
我将为那些经验不足的人详细介绍一下:
(注意:我还没有找到如何用新修改的inString值重新填充文本框的方法,因此如果有人能指出如何进行,那就太好了)应该这样调用
match
属性:isNonAscii.match($(this.val())
)。程序不会神奇地知道您想要将输入值与正则表达式匹配。谢谢您的输入。这是有道理的,但是我如何从文本框中的字符串中删除检测到的无效字符呢?我决定改变我的方法,并选择服务器端解决方案(因为javascript有时可以在客户端浏览器中关闭)@GrantTool:不要通过完全更改问题的代码来使现有答案无效。非常感谢您的回答,但是我如何检测无效字符,从字符串中删除if并替换文本框中没有无效字符的新字符串?使用replace()
函数应该可以正常工作。你可以直接做,而不是那段代码@CasimimiritHippolyte的代码运行良好,感谢您的输入,但这不起作用,因为replace函数仅适用于可打印字符。控件字符(如BS、SOH、ACK等)是不可见的,因此不能用.replace方法提取。@grantTool:多么疯狂的想法!字符不可打印并不意味着替换方法找不到它!替换方法适用于任何字符(可打印或不可打印)。真的吗?这很奇怪,因为我刚刚测试了它,但它不起作用?你能给我看一下吗?@GrantDoole:我会给我的答案加上一个小测试。@GrantDoole:我忘了加g修饰符,这可能是你没有得到预期结果的原因。事实上更简单。@Casimirithippolyte谢谢,Caz.)大家好,所有问题的答案都很好,但我即将解决。虽然value.replace工作得很好,但它并不是我所需要的。我将用我目前所拥有的更新原始帖子。这将取代换行符/回车符,因此它不适用于多行文本。2019年,这仍然是我遇到的最优雅的解决方案。是的,它删除了换行符、回车符和制表符,但对于那些实际试图去除这些字符的人来说,这个解决方案非常漂亮,而且很容易让人读懂。你有完全正确的答案