0

この正規表現パターンを変更して、指定された 2 つの文字を連続して、または開始/終了で許可しないようにしようとしています -

/^[^\!\"\£\$\%\^\&\*\(\)\[\]\{\}\@\~\#\/\>\<\\\*]+$/

したがって、現時点では、文字列内のどこでもこれらの文字を防ぐことができますが、これらの文字で次のことが起こらないようにしたいと考えています:

  • 文字列の先頭と末尾にあるスペース、アポストロフィ'、アンダースコア_、ハイフン-、またはドット.

  • また、これらの文字が 2 つ連続しないようにします。つまり、''または_._' -__- ' .

どんな助けでも大歓迎です。

どうもありがとう

4

3 に答える 3

1

一方通行

/^(?=[^!"£$%^&*()[\]{}@~#\/><\\*]+$)(?!.*[ '_.-]{2})[^ '_.-].*[^ '_.-]$/

注、javascript 正規表現としてのみテストされています。

var rex = /^(?=[^!"£$%^&*()[\]{}@~#\/><\\*]+$)(?!.*[ '_.-]{2})[^ '_.-].*[^ '_.-]$/;
rex.test('okay');        // true
rex.test('_not okay');   // false

または、許可されていないパターンに一致させる

/^[ '_.-]|[ '_.-]$|[!"£$%^&*()[\]{}@~#\/><\\*]|[ '_.-]{2}/

最初の正規表現は、許可されていないパターンを含まない文字列のみに一致します。
上記のものは、文字列内の許可されていないパターンと一致します。

アップデート

PHPを使用して簡単にテストしました。唯一の違いは"、文字セットの をエスケープする必要があることです。

<?php
$test = 'some string';
$regex = "/^[ '_.-]|[ '_.-]$|[!\"£$%^&*()[\]{}@~#\/><\\*]|[ '_.-]{2}/";
if ( preg_match( $regex, $test ) ) {
    echo 'Disallowed!';
}
于 2013-02-20T11:32:33.117 に答える