35

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

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

但这只允许字母数字,不允许空格。我想允许空格、字母和数字。和句点(。)和破折号(-)

请帮帮我好吗?提前致谢。

4

3 回答 3

52

利用

preg_match('/^[a-z0-9 .\-]+$/i', $firstname)
于 2013-06-13T11:18:24.480 回答
20

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

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

\p{L}是任何语言的任何字母也匹配中文、希伯来语、阿拉伯语……字符。

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

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

于 2013-06-13T11:23:12.040 回答
4

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

对于空格和点,您可以简单地将它们添加到您的字符类中,如下所示:

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

简单的。

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

所以你的表达是:

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

希望有帮助。

于 2013-06-13T11:20:12.807 回答