このパターンを正しく機能させようとしていますが、うまく機能させることができません。基本的に、文字、数字、および次の文字のみを受け入れることができる文字列を検証したい:@!?_;:-,.
これが私がこれまでに持っているソースコードです:
<?php
$test_string = '1234bcd@!?_;:-,.';
echo preg_match( "/^[a-z0-9@!?_;:,.]{4,12}$/i", $test_string );
?>
このパターンを正しく機能させようとしていますが、うまく機能させることができません。基本的に、文字、数字、および次の文字のみを受け入れることができる文字列を検証したい:@!?_;:-,.
これが私がこれまでに持っているソースコードです:
<?php
$test_string = '1234bcd@!?_;:-,.';
echo preg_match( "/^[a-z0-9@!?_;:,.]{4,12}$/i", $test_string );
?>
あなたは整数を印刷しようとしていますが、それはあなたがしようとしていることを達成しません。これを試して:
if( preg_match( "/^[a-z0-9@!?_;:,.]{4,12}$/i", $test_string )) {
echo 'valid string!';
} else {
echo 'invalid!';
}
次の場合、正規表現は文字列を有効と見なすことに注意してください。
また、入力文字列が長すぎるだけでなく、正規表現でサポートされていないダッシュが含まれているため、無効であると想定されていることにも注意してください。
1234bcd@!?_;:-,.
^
No match
正規表現に含めるには、正規表現のキャラクタークラスの最後に配置します。
preg_match( "/^[a-z0-9@!?_;:,.-]{4,12}$/i", $test_string )
^
このパターンは機能します:
$test_string = '1234bcd@!?_;:-,.';
if(preg_match('/^[a-z0-9@!\?_;:,\.\-]{4,12}$/i', $test_string))
{
echo 'Valid';
}
ただし、この場合1234bcd@!?_;:-,.
、入力文字列の長さが 16 (4 ~ 12 文字ではない) であるため、そうではありません。
ちなみに、メタ文字は必ずエスケープしてください。完全なリストはこちらにあります。
一部の文字は、 などの正規表現によって予約されています。? など、バックスラッシュで使用します
if( preg_match( "/^[a-z0-9@!\?_;:,\.\-]{4,12}$/i", $test_string )) {
...
}