1

このパターンを正しく機能させようとしていますが、うまく機能させることができません。基本的に、文字、数字、および次の文字のみを受け入れることができる文字列を検証したい:@!?_;:-,.

これが私がこれまでに持っているソースコードです:

<?php
  $test_string = '1234bcd@!?_;:-,.';
  echo preg_match( "/^[a-z0-9@!?_;:,.]{4,12}$/i", $test_string );
?>
4

3 に答える 3

2

あなたは整数を印刷しようとしていますが、それはあなたがしようとしていることを達成しません。これを試して:

if( preg_match( "/^[a-z0-9@!?_;:,.]{4,12}$/i", $test_string )) {
    echo 'valid string!';
} else {
    echo 'invalid!';
}

次の場合、正規表現は文字列を有効と見なすことに注意してください。

  • 4〜12文字の長さ
  • アルパベティック文字、数字、および含まれている他の文字のみで構成されます。

また、入力文字列が長すぎるだけでなく、正規表現でサポートされていないダッシュが含まれているため、無効であると想定されていることにも注意してください。

1234bcd@!?_;:-,.
             ^
             No match

正規表現に含めるには、正規表現のキャラクタークラスの最後に配置します。

preg_match( "/^[a-z0-9@!?_;:,.-]{4,12}$/i", $test_string )
                              ^
于 2012-10-03T13:57:07.490 に答える
0

このパターンは機能します:

$test_string = '1234bcd@!?_;:-,.';

if(preg_match('/^[a-z0-9@!\?_;:,\.\-]{4,12}$/i', $test_string))
{
    echo 'Valid';
}

ただし、この場合1234bcd@!?_;:-,.、入力文字列の長さが 16 (4 ~ 12 文字ではない) であるため、そうではありません。

ちなみに、メタ文字は必ずエスケープしてください。完全なリストはこちらにあります

于 2012-10-03T14:10:04.397 に答える
0

一部の文字は、 などの正規表現によって予約されています。? など、バックスラッシュで使用します

if( preg_match( "/^[a-z0-9@!\?_;:,\.\-]{4,12}$/i", $test_string )) {  
  ...
} 
于 2012-10-03T13:59:56.960 に答える