4

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

例如,允许的字符有:a..z、A..Z、-、'' 用户必须能够以任何顺序输入这些字符。但他们绝不能使用那些字符以外的字符。

4

4 回答 4

8

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

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

if (preg_match('/[^A-Za-z-\w]/', $input)) { /* invalid charcter entered */ }
于 2009-11-22T15:11:26.393 回答
2

[a-zA-Z-\w]

[] 括号用于对字符进行分组并表现得像单个字符。所以你也可以做 [...]+ 之类的东西 az, AZ, 0-9 定义范围所以你不必写整个字母表

于 2009-11-22T15:10:27.470 回答
1

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

匹配字符串的^开头,这会阻止它匹配字符串的中间123abc。类似$地匹配字符串的结尾,防止它匹配abc123.
括号匹配其中的每个字符;表示和a-z之间的每个字符。为了匹配字符本身,把它放在最后。(匹配 a 、 a或 a ;匹配and之间的每个字符,但不匹配)。告诉它匹配它之前的一个或多个事物 。您可以将 替换为az-[19-]19-[1-9]19-
++*,这意味着 0 或更多,如果您还想匹配一个空字符串。

有关详细信息,请参阅此处

于 2009-11-22T15:10:40.263 回答
0

您将查看规定您允许的字符的否定^字符类[],然后测试匹配项。

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

//Matt beat me too it...
于 2009-11-22T15:13:46.487 回答