我使用ajax检查函数来检查插入的类别名称,它应该只有字母数字,也允许空格
我用以下正则表达式[a-zA-Z0-9_]+
eregi_replace
$check = eregi_replace('([a-zA-Z0-9_]+)', "", $catname);
但是当我插入类别名称时,例如hello world
,它失败了,因为它不接受空间,但如果我把它写为helloworld
工作,所以我明白错误必须在我使用的正则表达式中。
那么什么是正确的正则表达式,它可以过滤任何特殊字符,只允许字母数字和空格。
Thanks to lot
匹配字母、数字、下划线和空格的字符类为
['w ]
您不应该使用任何POSIX正则表达式函数,因为它们现在已被弃用。相反,请使用来自PCRE套件的高级对应项。
将正则表达式更改为:
([A-Za-z0-9_]+(?: +[A-Za-z0-9_]+)*)
我知道这并不像你所希望的那么简单。注意事项:
- 标识符必须以非空格 开头。
- 如果有空格,它们应该在单词之间,并且不匹配在末尾
-
?:
用于防止表达式中额外的分组,但不是必需的 - 空格后的
+
允许单词之间有多个空格。您可以通过删除单个空格来强制使用它,但在某些解决方案中,更好的做法是在内部使用与" +"
(带有加号的空格)匹配的preg_split
对该空间进行规范化,然后使用implode(" ", $array)
。但是呃……如果你只是验证,这应该是好的。
你已经做得差不多了,只要在方括号中加上's, "hello world"就会通过了。
[(- za - z0 - 9 _ ' s] +)
我得到了一些老朋友的帮助,我已经测试和工作完美-感谢所有的答案和评论,这对我很有帮助。
this works perfect
$check = eregi_replace('(^[a-zA-Z0-9 ]*$)', "", $catname);
字母数字加空格正则表达式
@Phil你的工作完美,但仍然会传递下划线~谢谢
@Michael海斯我不知道它没有工作的空白,但你的评论是非常有帮助的~谢谢
@kjetilh我将阅读更多关于$preg的信息~谢谢
@Alastair如果我用空格替换's,效果很好!~谢谢
eregi函数自PHP 5.3起已弃用。