0

どの文字が preg_match 関数に一致しないかを知る方法はありますか? 例えば:

preg_match('/^[a-z]*$/i', 'Hello World!');

間違った文字、この場合はスペースと「!」を知る機能はありますか?


返信ありがとうございます。ただし、例の問題は、文字列の開始と終了を示していないことです。あなたの例は、パターンで定義したのとまったく同じ文字列ではなく、別の文字列に含まれる文字列で機能します。

たとえば、次のようにフォーマットされた文字列で構成された、件名のイタリアの会計コードを検証する必要があるとします。

XXX XXX YY X YY X YYY X (X = letter, Y = number - without spaces)

どのパターンが:

'/^[A-Z]{6}[0-9]{2}[A-Z]{1}[0-9]{2}[A-Z]{1}[0-9]{3}[A-Z]{1}$/i'

パターンで定義したものと正確に一致する文字列を検証する必要があります。

あなたのコードを使用して 1 文字 (1 つだけ) 間違えると、文字列全体がエラーとして返されました。 http://eval.in/9178

逆パターンの問題は、AND または OR が挿入される複雑なパターンで発生します。

私が知りたいのは、失敗したかどうかだけでなく、preg_match が失敗した理由です。

4

3 に答える 3

2

このようなことを試しましたか?

$nonMatchingCharacters = preg_replace('/[a-z]/', '', $wholeString);

これにより、「正当な」文字が取り除かれ、検証エラー メッセージで言及したい文字だけが残ります。

などの他の治療を行うこともできます...

$nonMatchingCharactersArray = array_unique(explode('', $nonMatchingCharacters));

...ビットが取り除かれた単なる文字列ではなく、一意の一致しない文字の配列が必要な場合。

于 2013-02-07T15:53:55.020 に答える
0

preg_replace に一致するものをすべて削除し、残りを配列に分割します。

<?php

$str = preg_replace('/([0-9]{2}[a-z]*)/i', '', '03Hello 02World!');

$characters = str_split($str);

var_dump($characters);

http://eval.in/9152

于 2013-02-07T17:03:00.540 に答える
0

それはあなたにスペースと!

preg_match_all('/[^a-z]/i', 'Hello World!', $matches);

var_dump($matches);

http://eval.in/9132

于 2013-02-07T15:09:28.917 に答える