我正在尝试验证包含“字母数字字符,支持的符号和空格”的名称。在这里,我只需要允许一个hyphen(-)
,但不能只允许双hyphen(--)
。
这是我的代码如下:
$.validator.addMethod(
'alphanumeric_only',
function (val, elem) {
return this.optional(elem) || /^[^*~<^>+(\--)/;|.]+$/.test(val);
},
$.format("shouldn't contain *.^~<>/;|")
);
上面的代码甚至不允许单个hyphen(-)
。如何允许单个连字符,但防止双连字符。非常感谢任何帮助。
答案 0 :(得分:6)
为此,您需要一个否定的lookahead assertion:
/^(?!.*--)[^*~<^>+()\/;|.]+$/
应该这样做。
<强>解释强>
^ # Start of string
(?! # Assert it's impossible to match the following:
.* # any string, followed by
-- # two hyphens
) # End of lookahead
[^*~<^>+()\/;|.]+ # Match a string consisting only of characters other than these
$ # End of string
如果您的字符串可以包含换行符,那么这可能会失败。如果可以,请使用
/^(?![\s\S]*--)[^*~<^>+()\/;|.]+$/
答案 1 :(得分:4)
我建议您使用白名单而不是黑名单。但这很有效:
<input type="text" id="validate"/>
<script>
$('#validate').keyup(function(){
val = this.value;
if(/([*.^~<>/;|]|--)/.test(val)) this.style.backgroundColor='red';
else this.style.backgroundColor='';
});
</script>