文字列に次の文字以外の無効な文字が含まれているかどうかを確認するために、PHP に正規表現の一致を入れようとしています。
~!@#$%^&*()_-+=\}]{[::'"/>.<,
alpha, space, numeric
前述の文字以外の文字が含まれている場合、文字列を印刷したい
ßab? - Invalid
Ba,- - Valid
いくつかの入力で使用しようとしpreg_match
ましたが、完了できませんでした。
どんな助けでも大歓迎です。
文字列に次の文字以外の無効な文字が含まれているかどうかを確認するために、PHP に正規表現の一致を入れようとしています。
~!@#$%^&*()_-+=\}]{[::'"/>.<,
alpha, space, numeric
前述の文字以外の文字が含まれている場合、文字列を印刷したい
ßab? - Invalid
Ba,- - Valid
いくつかの入力で使用しようとしpreg_match
ましたが、完了できませんでした。
どんな助けでも大歓迎です。
アップデート
この式は、有効な範囲の負のセットと一致します。
$valid = preg_quote('~!@#$%^&*()_-+=\}]{[::\'"/>.<,', '/');
if (preg_match("/[^$valid\d\sA-Za-z]/", $invalid)) {
echo "invalid chars\n";
}
ここで使用preg_quote()
して、すべての文字が適切にエスケープされていることを確認します。
古い答え
あなたの質問に基づいてネガティブセットを計算しました:
if (preg_match('/[\x00-\x08\x0c\x0e-\x1f\x3b\x3f\x60\x7c\x7f-\xff]/', $str)) {
echo "matches invalid chars\n";
}
このセットに到達するには、次のコードを使用できます。
$s = '~!@#$%^&*()_-+=\}]{[::\'"/>.<,'
. join('', range('a', 'z'))
. join('', range('A', 'Z'))
. join('', range('0', '9'))
. " \t\r\v\n";
$missing = count_chars($s, 2);
print_r($missing);
内部にない序数文字コードの配列を出力し$s
ます。これで上記のパターンを生成できます。
以下の正規表現は、特殊文字、アルファ、スペース、数値などを含む任意の文字列と一致します。
/^[\s\w~!@#$%^&*()+=\}\]{\[:'"\/>.<,-]*$/
^
は文字列の先頭です..$
は文字列の末尾です.. は、部分的ではなく入力と正確に一致するため、必須^
です$
[]
その中の文字のいずれかに一致する文字クラスです。
*
先行する文字、グループ、または文字クラス0 から何度も 一致する量指定子です。