我一直在尝试创建一个允许字母、数字和以下字符的正则表达式:_ - !? . ,
这是我到目前为止所拥有的:
/^[-\'a-zA-Z0-9_!\?,.\s]+$/ //not escaping the ?
还有这个版本:
/^[-\'a-zA-Z0-9_!\?,.\s]+$/ //attempting to escape the ?
这些似乎都无法匹配以下内容:
“哦,为什么,哦,为什么这个正则表达式不起作用!它变得非常令人沮丧?令人沮丧 - 至少可以这么说。嘿,看,下划线_我想知道这次它是否会匹配?”
有人可以指出我做错了什么吗?我必须指出,我的脚本接受用户输入(在这种情况下是引号中的段落)并去除所有空白,因此实际输入没有空白。
谢谢!
更新:感谢 Lix 的建议,这就是我目前所拥有的:
/^[-\'a-zA-Z0-9_!\?,\.\s]+$/
但是,它仍然无法正常工作??
UPDATE2 好的,根据输入,这就是正在发生的事情。用户输入字符串,然后我通过以下函数运行字符串:
$comment = preg_replace('/\s+/', '',
htmlspecialchars(strip_tags(trim($user_comment_orig))));
所以最后,用户输入只是一长串没有任何空格的字符。然后使用以下命令运行该字符串:
preg_match("@^[-_!?.,a-zA-Z0-9]+$@",$comment)
什么可能在这里造成麻烦?
最后更新:
最终使用了这个正则表达式:
"@[-'A-Z0-9_?!,.]+@i"
谢谢大家!大声笑,一旦你发现我的错误在哪里,你会杀了我的!
好的,所以我有这段代码:
if(!preg_match($pattern,$comment) || strlen($comment) < 2 || strlen($comment) > 60){
天啊!!!我从不费心去看代码的 strlen 部分。当然每次都会失败...我只允许 60 个字符!!!!