1

許可する文字列のみをチェックしたいのですa-z A-Z 0-9 . / ? &が、正確に preg_match() を使用する方法がわかりません。

コードの各部分が何であるかも説明していただければ幸いです。(つまり、追加する理由と追加する/^方法/)

ありがとう

4

2 に答える 2

4

ここにあります:

$input = 'Hello...?World';
$regex = '~^[a-z0-9&./?]+$~i';

if (preg_match($regex, $input)) {
  echo "yeah!";
}

この方法で、独自の文字クラスを構築し、文字列を検証できます。

説明:

~
^                        # string start
[                        # start character class 
  a-z                    # letters from a to z
  0-9                    # digits from 0 to 9
  &./?                   # &,.,/ and ? chars
]                        # end character class
+                        # repeat one or more time
$                        # string end
~ix
于 2012-06-15T07:56:37.857 に答える
-1
if ( preg_match('[^a-zA-Z0-9./?&]', 'azAZ09./?&') ) {
     //found a character that does not match!
 } else //regex failed, meaning all characters actually match

ioseb のものとかなり似ていますが、大文字と小文字が異なるため、AZ を含める必要があります。彼はすでに文字の優れたガイドを書いているので、代わりの正規表現を紹介します。

代わりに、否定 (文字クラス '[]' の先頭に含まれる場合、代わりに別の意味を持つ先頭の ^ ) に依存し、その後に「許可された文字」の文字列が続きます。

そうすれば、正規表現が許可されていない文字 ([] は 1 文字を意味します) を検出した場合、解析を停止して true を返します。これは、無効な文字列が見つかったことを意味します。

于 2012-06-15T08:23:01.787 に答える