php只允许使用preg_match的字母,数字,空格和特定符号

时间:2013-06-13 11:16:36

标签: php regex string validation preg-match

在我的php上我使用preg_match来验证输入文本。

if(preg_match('/^[a-zA-Z0-9]+$/', $firstname)) {
}

但这仅允许使用字母数字,并且不允许使用空格。我想允许空格,字母和数字。和句点(。)和短划线( - )

请帮帮我吗?提前谢谢。

3 个答案:

答案 0 :(得分:38)

使用

preg_match('/^[a-z0-9 .\-]+$/i', $firstname)

答案 1 :(得分:20)

如果您不仅要允许ASCII,请使用Unicode properties

preg_match('/^[\p{L}\p{N} .-]+$/', $firstname)

\p{L}任何语言中的任何字母,也包括中文,希伯来文,阿拉伯文,...字符。

\p{N}任何类型的数字字符(也指例如罗马数字)

如果您想限制数字,请使用\p{Nd}

答案 2 :(得分:3)

这里唯一困难的是破折号。

对于空格和圆点,您只需将它们添加到角色类中,如下所示:

'/^[a-zA-Z0-9 .]+$/'

易。

破折号稍微有些难度,因为连字符在这样的字符类中具有特殊含义(如您所知,它们用于a-z等字符范围)。为了在字符类中指定连字符,它必须是类中的第一个字符(即它不能在两个字符之间,否则它将被视为字符范围标记)。

所以你的表达是:

'/^[-a-zA-Z0-9 .]+$/'

希望有所帮助。