PHP正则表达式[仅接受选定的字符]

时间:2009-11-22 15:04:22

标签: php regex string validation preg-match

我想接受一个字符列表作为用户的输入并拒绝其余的。我可以接受格式化的字符串或查找是否缺少字符/字符串。 但是我如何只接受一组角色而拒绝所有其他角色。我想用preg_match来做这件事。

e.g。允许的字符是:a..z,A..Z, - ,'' 用户必须能够以任何顺序输入这些字符。但是除了那些角色之外,不允许使用它们。

4 个答案:

答案 0 :(得分:8)

使用否定的字符类:[^ A-Za-z- \ w]

只有当用户输入的内容不是该字符类中的内容时,才会匹配。

if (preg_match('/[^A-Za-z-\w]/', $input)) { /* invalid charcter entered */ }

答案 1 :(得分:2)

[A-ZA-Z- \ W]

[]括号用于对字符进行分组,其行为类似于单个字符。所以你也可以做[...] +之类的东西 还有a-z,A-Z,0-9定义范围,因此您不必编写整个字母

答案 2 :(得分:1)

您可以使用以下正则表达式:^[a-zA-Z -]+$

^匹配字符串的开头,这阻止它匹配字符串123abc的中间部分。 $类似地匹配字符串的结尾,以防止它与abc123的中间匹配 括号与其中的每个字符相匹配; a-z表示az之间的每个字符。要匹配-字符本身,请将其放在最后。 ([19-]匹配19-; [1-9]匹配19之间的每个字符,与-不匹配。
+告诉它匹配之前的一个或多个事物。如果您还想匹配空字符串,则可以将+替换为*,即0或更多。

有关详细信息,请参阅here

答案 3 :(得分:0)

你会看到一个否定的^字符类[],它规定了你允许的字符,然后测试匹配。

$pattern = '/[^A-Za-z\- ]/';
if (preg_match($pattern, $string_of_input)){
   //return a fail
}

//Matt beat me too it...