如何检查字符串中的多个特定字符?
How can I check a string for multiple certain characters?
我有一个字符串,我需要检查它的几个字符。我可以用 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...
.
使用否定先行断言。
if (preg_match("~^(?!.*?[-_^?}{\]\[/'@*&#])~", $str) ){
// do stuff
}
仅当字符串不包含任何提到的字符时,这才会执行大括号内的内容。
如果您希望字符串仅包含单词字符和空格。
if (preg_match("~^[\w\h]+$~", $str)){
// do stuff
}
或
AS @Reizer 提到,
if(preg_match("~^[^_@/'\]\[#&*^!?}{-]*$~", $str)){
将上面的*
(出现在字符class旁边)替换为+
,如果你不想匹配空字符串。
仅适用于字母和空格。
if(preg_match("~^[a-z\h]+$~i", $str) ){
可能是这样的:
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 some stuff
}
您可以使用基本的正则表达式:
$unwantedChars = ['a', '{', '}'];
$testString = '{a}sdf';
if(preg_match('/[' . preg_quote(implode(',', $unwantedChars)) . ']+/', $testString)) {
print "Contains invalid characters!";
} else {
print "OK";
}
我有一个字符串,我需要检查它的几个字符。我可以用 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...
.
使用否定先行断言。
if (preg_match("~^(?!.*?[-_^?}{\]\[/'@*&#])~", $str) ){
// do stuff
}
仅当字符串不包含任何提到的字符时,这才会执行大括号内的内容。
如果您希望字符串仅包含单词字符和空格。
if (preg_match("~^[\w\h]+$~", $str)){
// do stuff
}
或
AS @Reizer 提到,
if(preg_match("~^[^_@/'\]\[#&*^!?}{-]*$~", $str)){
将上面的*
(出现在字符class旁边)替换为+
,如果你不想匹配空字符串。
仅适用于字母和空格。
if(preg_match("~^[a-z\h]+$~i", $str) ){
可能是这样的:
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 some stuff
}
您可以使用基本的正则表达式:
$unwantedChars = ['a', '{', '}'];
$testString = '{a}sdf';
if(preg_match('/[' . preg_quote(implode(',', $unwantedChars)) . ']+/', $testString)) {
print "Contains invalid characters!";
} else {
print "OK";
}