我的JavaScript非常生疏,所以对此的任何帮助都会很棒。我要求检测不可打印的字符(控制字符,如SOH,BS等)以及扩展的ascii字符,如字符串中的Ž并删除它们,但我不知道如何编写代码?
有人能指出我如何解决这个问题的正确方向吗?这就是我到目前为止所做的:
$(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");
}
});
});
答案 0 :(得分:44)
要定位不属于可打印基本ASCII范围的字符,您可以使用这个简单的正则表达式:
[^ -~]+
说明:在ASCII table的前128个字符中,可打印范围以空格字符开头,以波形符结束。这些是您要保留的字符。该范围用[ -~]
表示,不在该范围内的字符用[^ -~]
表示。这些是我们想要替换的。因此:
result = string.replace(/[^ -~]+/g, "");
答案 1 :(得分:33)
无需测试,可以直接处理文本框内容:
textBoxContent = textBoxContent.replace(/[^\x20-\x7E]+/g, '');
其中范围\x20-\x7E
涵盖ascii表的可打印部分。
代码示例:
$('.jsTextArea').blur(function() {
this.value = this.value.replace(/[^\x20-\x7E]+/g, '');
});
答案 2 :(得分:1)
您必须将模式(而不是字符串)分配到isNonAscii
变量中,然后使用test()
检查它是否匹配。 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");
}
});
});
检查jsFiddle
答案 3 :(得分:-6)
对于那些遇到此问题且正在寻找“全部解决方案”的人。解决方案...这就是我最终解决它的方法:
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;
}
对于经验不足的人,我会详细介绍一下:
我们首先循环遍历整个字符串的每个字符,并使用char的IsControl方法来确定字符是否是控制字符。
如果找到控制字符,请将匹配的字符复制到字符串,然后使用Replace方法将控制字符更改为空字符串。冲洗并重复其余部分。
一旦我们遍历整个字符串,我们就会使用定义的正则表达式(它将匹配任何不是控制字符或标准ascii字符的字符),并再次用空字符串替换匹配的字符。在while循环中执行此操作意味着charMatch始终为true,将替换该字符。
最后删除所有字符后我们将整个字符串循环,然后返回inString。
(注意:我还没有设法弄清楚如何使用新修改的inString值重新填充TextBox,所以如果有人能指出如何做到这一点会很棒)