我想使用以下正则表达式只接受字母,数字,逗号和点。如果我使用$string
它表示无效数据,但如果我使用$string2
则表示有效数据。
1)为什么$string
不接受有效数据?我错过了什么?
2)如果我接受逗号,我怎么能逃脱它?使用mysqli_real_escape_string?如果是这样的话,当我从Db显示它时它会显示反斜杠。请帮忙。谢谢。
$string = "I m a good boy";
$string2 = "Imagoodboy";
if(preg_match("/^[a-zA-Z0-9]+$/", $string) == 0)
echo "Invalid data";
else
echo "Valid data";
答案 0 :(得分:2)
您需要在角色类中加入.
,并在条件检查中反向:
if(preg_match('/^[a-zA-Z0-9.]+$/', $string))
echo "valid data";
else
echo "InValid data";
同样$string
也有空格,并且空格不在允许的字符列表中,这就是它失败的原因。如果你想包含空格也可以使正则表达式为:
/^[a-zA-Z0-9. ]+$/
答案 1 :(得分:1)
First String包含空格。根据你的正则表达式,空格无效。要验证$ string,你必须在正则表达式中创建有效的空格。
试试这个:
preg_match("/[^a-zA-Z0-9., ]/",$string);
^
Space
答案 2 :(得分:0)
我认为问题来自$ string中的空格。
在捕获组中添加空格
if(preg_match("/^[a-zA-Z0-9. ]+$/", $string) == 0)
echo "Invalid data";
else
echo "Valid data";
它应该可以正常工作
答案 3 :(得分:0)
你错过了一个空格.
,试试看:
if(preg_match("/^[\d\w\s\.]+$/", $string) == 0)
echo "Invalid data";
else
echo "Valid data";