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(と呼ばれるsinglelineor dotall) 修飾子はそれを変更します。残念ながら、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 のみ)、[^]任意の 1 文字にも一致する "candle operator" を使用できます (空の文字クラスの否定であるため、つまり、空のセットにない任意の文字に一致するため)。多かれ少なかれ読みやすいと思うかどうかは、好みの問題だと思います。

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