1

我想检查一个字符串是否只允许a-z A-Z 0-9 . / ? &,但我不确定如何准确地使用 preg_match()。

如果您还可以解释代码的每个部分是什么,我将不胜感激!(即为什么要添加/^以及如何添加/

谢谢

4

2 回答 2

4

这里是:

$input = 'Hello...?World';
$regex = '~^[a-z0-9&./?]+$~i';

if (preg_match($regex, $input)) {
  echo "yeah!";
}

您可以通过这种方式构建自己的字符类并验证字符串。

解释:

~
^                        # string start
[                        # start character class 
  a-z                    # letters from a to z
  0-9                    # digits from 0 to 9
  &./?                   # &,.,/ and ? chars
]                        # end character class
+                        # repeat one or more time
$                        # string end
~ix
于 2012-06-15T07:56:37.857 回答
-1
if ( preg_match('[^a-zA-Z0-9./?&]', 'azAZ09./?&') ) {
     //found a character that does not match!
 } else //regex failed, meaning all characters actually match

与 ioseb 非常相似,但您需要包含 AZ,因为大写字母与小写字母不同。他已经为这些角色写了一个很棒的指南,所以我只提供一个替代的正则表达式。

我改用否定(开头的 ^,当包含在字符类 '[]' 的开头时,它具有不同的含义),然后是“允许的字符”字符串。

这样,如果正则表达式发现任何不是允许的字符([] 表示一个字符),它将停止解析并返回 true,这意味着找到了一个无效的字符串。

于 2012-06-15T08:23:01.787 回答