无法验证连字符

时间:2012-02-13 07:52:23

标签: javascript jquery regex

我正在尝试验证包含“字母数字字符,支持的符号和空格”的名称。在这里,我只需要允许一个hyphen(-),但不能只允许双hyphen(--)

这是我的代码如下:

$.validator.addMethod(
  'alphanumeric_only',
  function (val, elem) {
    return this.optional(elem) || /^[^*~<^>+(\--)/;|.]+$/.test(val);
  },
  $.format("shouldn't contain *.^~<>/;|")
);

上面的代码甚至不允许单个hyphen(-)。如何允许单个连字符,但防止双连字符。非常感谢任何帮助。

2 个答案:

答案 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>