【发布时间】:2014-07-31 04:15:36
【问题描述】:
我想验证一个不允许以下字符的字符串。
<,>,:,","/,\,|,?,*,#
我想通过 JavaScript 验证这一点。 我正在尝试使用以下代码。
var reg = /[^a-zA-Z0-9 \-_]+/;
reg.test(filename[0])
但这无法验证符号#。
请帮忙。
【问题讨论】:
标签: javascript asp.net c#-4.0
我想验证一个不允许以下字符的字符串。
<,>,:,","/,\,|,?,*,#
我想通过 JavaScript 验证这一点。 我正在尝试使用以下代码。
var reg = /[^a-zA-Z0-9 \-_]+/;
reg.test(filename[0])
但这无法验证符号#。
请帮忙。
【问题讨论】:
标签: javascript asp.net c#-4.0
您遇到的问题是您在模式中间包含了连字符而没有转义它。这告诉引擎你期待一个范围——在这种情况下,空格通过下划线。 (在我看来)将连字符作为模式中的第一个或最后一个字符更容易,此时您不必转义它。 (如果您使用的是否定字符类,它将是第二个字符。)
例如
var reg = /[^a-zA-Z0-9 \-_]+/;
--或--
var reg = /[^a-zA-Z0-9 _-]+/;
--或--
var reg = /[^-a-zA-Z0-9 _]+/;
【讨论】:
您是否只想允许英文字母 a-z(和 A-Z)、数字、空格、“_”和“-”?如果是这样,这与禁止您指定的字符不同,因为 '☃' 没有您提供的字符,但在您的用例中可能不是有效的字符串。
如果你只想要英文字母、数字、空格、'_'和'-',你可以使用下面的RegExp和条件:
var reg = /^[a-zA-Z0-9 \-_]+$/;
if (reg.test(filename[0])) {
// String is ok
}
这表示字符串中开头 (^) 和结尾 ($) 之间的所有内容都必须是一个或多个允许的字符。
如果您想禁止您在问题中提供的字符,您可以使用:
var reg = /[\<\>\:\,\/\\\|\?\*\#]/;
if (!reg.test(filename[0])) {
// String is ok
}
这表示搜索您列出的任何字符(它们都在它们之前用\ 转义),如果找到任何字符,则该字符串无效。因此,只有在测试失败的情况下,字符串才是有效的字符串 - 这就是为什么在测试之前会有 !。
【讨论】:
string sourceString ="something" ;
var outString = sourceString.replace(/[`~!@#$%^&*()_|+\-=?;:'",.<>\{\}\[\]\\\/]/gi, '');
【讨论】: