0

文字列が指定されたパターンではないことを検出する正規表現がありました:

/\A((?!.*(www|http|@|\.com\b|\.net\b|\.de\b|\.info\b)).*)$/m

これは、「こんにちは、www.test.com」のような文字列がFALSEであることを意味しますが、ここでは、www.example.comという1つのURLを許可したいと思います。

その意味は:

「これはテストです」>TRUE

「これはテストですwww.example.com」>TRUE

「これはテストexample.comです」>TRUE

「これはテストですwww.test.comthis」>FALSE

「これはテストtest.comです」>FALSE

"これはテストtest.comですこのwww.example.com ">FALSE(1つの禁止されたU​​RLが存在するためfalse)

AND演算子を含める必要があるようですが、次のようになります。

(?=.*PATTERN)

しかし、残念ながら私はそれを機能させることができませんでした。

ps:URLを検出するこの正規表現は完全ではないことは知っていますが、私の要件のため、何もないよりはましです。

ありがとう !

編集:私の正規表現はバリデーターにあります:

def self.validates_is_url_and_email_free(*attr_name)
    validates_format_of attr_name, {:with => /\A((?!.*(www|http|@|\.com\b|\.net\b|\.de\b|\.info\b)).*)$/m, :message => I18n.t(:not_url_email)}
end
4

1 に答える 1

1

この場合、2つの別々の式を使用することが解決策になる可能性があります。

OKAY_EXPR = /example\.com/
BANNED_EXPR = /.../ # Existing expression

if (string.match(OKAY_EXPR) and !string.match(BANNED_EXPR))
  # ...
end

ここで何をしているのかは明確ではありませんが、それは非常に制限的なTLDのセットのようです。処理が必要になる可能性のある有効なTLDは文字通り何千もあります。

于 2012-11-18T21:53:11.097 に答える