我有一个字符串,我需要检查几个字符。我可以用strpos();
做到这一点。但在这种情况下,我需要多次使用strpose();
。像这样的东西:
$str = 'this is a test';
if(
strpos($str, "-") === false &&
strpos($str, "_") === false &&
strpos($str, "@") === false &&
strpos($str, "/") === false &&
strpos($str, "'") === false &&
strpos($str, "]") === false &&
strpos($str, "[") === false &&
strpos($str, "#") === false &&
strpos($str, "&") === false &&
strpos($str, "*") === false &&
strpos($str, "^") === false &&
strpos($str, "!") === false &&
strpos($str, "?") === false &&
strpos($str, "{") === false &&
strpos($str, "}") === false
)
{ do stuff }
现在我想知道,是否可以使用regex
来定义条件摘要?
编辑:以下是一些示例:
$str = 'foo' ----I want this output---> true
$str = 'foo!' -------------------------> false
$str = '}foo' -------------------------> false
$str = 'foo*bar' -------------------------> false
等等。换句话说,我只想要文字字符:abcdefghi...
。
答案 0 :(得分:3)
使用否定先行断言。
if (preg_match("~^(?!.*?[-_^?}{\]\[/'@*&#])~", $str) ){
// do stuff
}
只有当字符串不包含任何提到的字符时,才会执行大括号内的内容。
如果您希望字符串仅包含单词字符和空格。
if (preg_match("~^[\w\h]+$~", $str)){
// do stuff
}
或
AS @Reizer提到,
if(preg_match("~^[^_@/'\]\[#&*^!?}{-]*$~", $str)){
如果您不想匹配空字符串,请将上面的*
(出现在字符类旁边)替换为+
。
仅限字母和空格。
if(preg_match("~^[a-z\h]+$~i", $str) ){
答案 1 :(得分:3)
你可以使用基本的正则表达式:
$unwantedChars = ['a', '{', '}'];
$testString = '{a}sdf';
if(preg_match('/[' . preg_quote(implode(',', $unwantedChars)) . ']+/', $testString)) {
print "Contains invalid characters!";
} else {
print "OK";
}
答案 2 :(得分:0)
可能是这样的:
function strpos_multi(array $chars, $str) {
foreach($chars as $char) {
if (strpos($str, char) !== false) { return false; }
}
return true
}
$res = strpos_multi(["-", "_", "@", "/", "'", "]", "[", "#", "&", "*", "^", "!", "?", "{", "}"], $str);
if ($res) {
do staff
}