-1

PHP コードの文字列に、指定された文字のリストのみが含まれているかどうかを確認する必要があります。しかし、それらのいくつかはスケープが必要になる可能性があるため、私はそれを機能させることができません。あらゆることを試しましたが、うまくいきません...

必要な検証は次のとおりです。

  • 0-9
  • AZ
  • から
  • 文字: .%^& ()$#@!/ -+/

基本的に、不明なASCII文字があるかどうかを確認したい(すでにそれを行う機能があるかどうかはわかりません)。

私のコードは次のようになりました:

if(preg_match("/[A-Za-z0-9\.\#\-\+\*\\\/\=\_\%\$\(\)]/", $cmd) === false)

それで、すべての文字は特別ですか?

4

3 に答える 3

2

いいえ、これらの文字はすべて特別なものではありません。よくわからない場合は、次のようにして PHP にエスケープを行わせることができますpreg_quote()

$regex = '/[A-Za-z0-9' . preg_quote( '.%^&()$#@!/-+/', '/') . ']+/';
if( !preg_match( $regex, $cmd))

また、 をpreg_match()返しintます。ブール値で行っています===が、同じ型になることは決してないため、真になることはありません。を簡単に確認できますif( !preg_match())

于 2012-08-04T19:16:09.853 に答える
1

*正規表現の末尾にa がない可能性があります。また、代わりにセットを次のように表現することもできます[\x00-\x7F](ここから取得)。

これはうまくいくはずです:

[\x00-\x7F]*
于 2012-08-04T19:16:33.363 に答える
0

if(preg_match("/[.%^&()$#@!/+-a-zA-Z\d\s]+/", $cmd) === false) アンカーが必要な場合if(preg_match("/^[.%^&()$#@!/+-a-zA-Z\d\s]+$/", $cmd) === false)

于 2012-08-04T19:14:10.657 に答える