我正在努力使这种模式正常工作,但我无法让它发挥作用。基本上,我想验证一个只能接受字母、数字和以下字符的字符串:@!?_;:-,.
这是我到目前为止的源代码:
<?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 )
^
一些字符由正则表达式保留,例如 . ? 等将它们与反斜杠一起使用
if( 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 个字符之间的长度)。
顺便说一句,总是转义元字符。您将在此处找到完整列表。