这种情况的正则表达式是什么?

时间:2011-06-07 05:05:43

标签: php regex

我希望正则表达式清理我应该满足以下条件的数据

a) a-z and A-Z allowed

b) 0-9 allowed

c) Special Symbols like Comma (,) dot (.) question Mark (? allowed)

d) Single Space is allowed

我试过了,想出了这个

preg_replace('%[^a-zA-Z0-9,.?\s]%', '', $string);

我对RegExp并不熟悉,虽然上面的代码有效,但我想知道

  

a)如果我使用正确的RegExp   语法?

     

b)如果我不使用modulus(%)   它不会的语法的开始和结束   工作,我不知道是什么   模数的目的在这里?

4 个答案:

答案 0 :(得分:2)

如果您要求允许任何单个空白(包括空格,换行符,水平制表符,垂直制表符,换页符等),那么您的正则表达式是正确的。但是,如果您只想允许空格,请将\s更改为preg_replace调用将从输入中删除所有不允许的字符。

%调用中的preg_replace用作正则表达式分隔符。 preg_函数族期望正则表达式位于一对分隔符中。 My answer here talks more on what can be used as delimiters

答案 1 :(得分:1)

a)如果有效,那是正确的。

b)“当使用PCRE函数时,要求模式由分隔符括起来。分隔符可以是任何非字母数字,非反斜杠,非空白字符” - 来自PHP Documentation

答案 2 :(得分:1)

\ s是一个空格字符。其中包括标签。

另外,如果你可以允许下划线,\ w可能会让它更简单

\w = [a-zA-Z0-9_]   // \w is a "word" character (including underscores)

答案 3 :(得分:0)

您需要转义点,逗号和问号

[^a-zA-Z0-9\,\.\?\s]