4

我有这个表达:

$(document).ready(function(){
    $.validator.addMethod(
        "regex",
        function(value, element) {
            return this.optional(element) || /^(?!.*www)(?!.*http)(?!.*@)(?!.*\.com)(?!.*\.pt)(?!.*co\.uk).+$/i.test(value);
        },
        "Description field can not include e-mail and/or urls."
    );
    $("#regForm").validate();
});

如果我有这样的文本,我会收到错误,因为换行符

A Loja virtual possui uma vasta linha de bijouterias folheadas a ouro e prata. São produtos bastante procurados e com preços muito acessíveis(50% de desconto no atacado).
Ha mais de 10 anos no mercado de folheados.

Produtos de excelente qualidade.

如果我有这个文本,没有换行符,它工作正常:

A Loja virtual possui uma vasta linha de bijouterias folheadas a ouro e prata. São produtos bastante procurados e com preços muito acessíveis(50% de desconto no atacado).Ha  mais de 10 anos no mercado de folheados.Produtos de excelente qualidade.

我怎样才能解决这个问题?

4

1 回答 1

11

.默认情况下不匹配换行符。通常,s(称为singlelinedotall)修饰符会改变它。不幸的是,JavaScript 不支持它。

有一个(稍微冗长的)技巧可以解决这个问题。字符类[\s\S]匹配任何空格和任何非空格字符。即任何字符。所以你需要这样做:

/^(?![\s\S]*www)(?![\s\S]*http)(?![\s\S]*@)(?![\s\S]*\.com)(?![\s\S]*\.pt)(?![\s\S]*co\.uk)[\s\S]+$/i

或者,(仅在 JavaScript 中)您可以使用“蜡烛运算符” [^],它也匹配任何单个字符(因为它是空字符类的否定,即它匹配不在空集中的任何字符)。我猜你是否发现或多或少的可读性是一个品味问题:

/^(?![^]*www)(?![^]*http)(?![^]*@)(?![^]*\.com)(?![^]*\.pt)(?![^]*co\.uk)[^]+$/i
于 2012-11-22T21:06:47.323 回答