空格和字母数字的正则表达式是什么

时间:2011-08-14 22:51:59

标签: php

我正在使用ajax检查功能来检查插入的类别名称,该名称应该只是字母数字并且还允许空格

我已将此函数eregi_replace与以下正则表达式[a-zA-Z0-9_]+

一起使用
$check = eregi_replace('([a-zA-Z0-9_]+)', "", $catname);

但是当我插入例如hello world的类别名称时,它失败了,因为它不接受空间,但如果我将其写为helloworld,那么我理解错误必须在正则表达式i'中使用。

那么过滤任何特殊字符并且只允许字母数字和空格的正确正则表达式是什么。

非常感谢

5 个答案:

答案 0 :(得分:5)

匹配字母,数字,下划线和空格的字符类将是

[\w ]

您应该使用任何POSIX正则表达式函数,因为它们现已弃用。相反,请使用PCRE suite中的高级对手。

答案 1 :(得分:3)

将正则表达式更改为:

([A-Za-z0-9_]+(?: +[A-Za-z0-9_]+)*)

我意识到它并不像你希望的那样简单明了。注意事项:

  • 标识符必须以非空格
  • 开头
  • 如果有空格,它们应该在单词之间,而不是在末尾匹配
  • ?:用于阻止表达式中的额外分组,但不是必需的
  • 空格字符后面的+允许单词之间有多个空格。您可以通过删除它来强制执行单个空格,但在某些解决方案中,最好使用preg_split(带有加号的空格)匹配的" +"在内部规范化空间,然后使用implode(" ", $array)。但是......如果你只是在验证,那应该没事。

答案 2 :(得分:2)

你几乎是正确的,只需将\ s添加到方括号中,“hello world”就会通过。

([A-ZA-Z0-9_ \ S] +)

答案 3 :(得分:1)

我得到了老朋友的一些帮助,我已经过测试并且工作得很完美 - 谢谢大家的回答和评论,这对我很有帮助。

这完美无缺

$check = eregi_replace('(^[a-zA-Z0-9 ]*$)', "", $catname);

字母数字和空格正则表达式

@Phil 你的工作完美,但仍然会通过下划线〜谢谢

<迈克尔·海斯 我不知道它对空白没有用,但你的评论非常有用〜谢谢

@kjetilh 我会阅读更多关于$ preg~thanks

的信息

@Alastair 如果我用空格替换\ s,那么工作正常! 〜谢谢

答案 4 :(得分:0)