2013-06-13 86 views
25

我的php我使用preg_match来验证输入文本。PHP只允许使用pregmatch的字母,数字,空格和特定符号

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

但是,这只允许字母数字和不允许空格。我想要允许空格,字母和数字。和期间(。)和短划线( - )

请帮我一下吗?提前致谢。

+0

刚刚尝试添加都在你的正则表达式(也意味着如罗马数字)

。 – Rikesh

回答

30

使用

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

谢谢,我相信这是我所需要的 – CudoX

+0

不客气。 – Baba

+0

作为一项规则,我倾向于避免简单地在正则表达式中使用空格(因为它实际上可以代表许多不同的字符,具体取决于编码你的编辑器),并通过使用'\ 040'明确。 – HorusKol

2

这里唯一的困难位是冲刺。

对于空间和点,你可以简单地将它们添加到您的字符类,像这样:

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

容易。

由于连字符在像这样的字符类中具有特殊含义(正如您已经知道的,它们用于范围字符如a-z),短划线会稍微难一些。为了在字符类中指定连字符,它必须是类中的第一个字符(即它不能在两个字符之间,否则将被视为字符范围标记)。

所以,你的表达应该是:

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

希望有所帮助。

+0

是的,这有帮助。现在我甚至可以进一步理解preg_match函数的正确语法。 – CudoX

+3

如果你想国际化,为什么不使用'\ p {N}'而不是'0-9' –

14

如果你不仅要允许ASCII,然后使用Unicode properties

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

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

\p{N}任何数字字符,如果你想限制为数字,然后用\p{Nd}

+1

来逃避它这将是一致的, –

+0

@CasimiretHippolyte,当然可以使用'\\' – stema

+2

我相信你应该添加一个'u'修饰符,如果这是为了在PHP中正常工作。像这样: preg_match('/^[\ p {L} \ p {N} .-] + $/u',$ firstname) – Larpon

相关问题