我想接受一个字符列表作为用户的输入并拒绝其余的。我可以接受格式化的字符串或查找是否缺少字符/字符串。 但是我如何只接受一组角色而拒绝所有其他角色。我想用preg_match来做这件事。
e.g。允许的字符是:a..z,A..Z, - ,'' 用户必须能够以任何顺序输入这些字符。但是除了那些角色之外,不允许使用它们。
答案 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
表示a
和z
之间的每个字符。要匹配-
字符本身,请将其放在最后。 ([19-]
匹配1
,9
或-
; [1-9]
匹配1
和9
之间的每个字符,与-
不匹配。
+
告诉它匹配之前的一个或多个事物。如果您还想匹配空字符串,则可以将+
替换为*
,即0或更多。
有关详细信息,请参阅here。
答案 3 :(得分:0)
你会看到一个否定的^
字符类[]
,它规定了你允许的字符,然后测试匹配。
$pattern = '/[^A-Za-z\- ]/';
if (preg_match($pattern, $string_of_input)){
//return a fail
}
//Matt beat me too it...