从允许的字符或字符串中查找字符或字符串的存在
Finding presence of chars or strings out of the allowed ones
好吧,我被卡住了,我找不到正则表达式提供给 PHP preg_match.
的正确形式
我有两个字符串。说 "mdo"
和 "o"
,但它们可能真的很随机。
我有一个包含允许的字符和字符串的字典。
例如,允许的字符为 "a-gm0-9"
,允许的字符串为 "do"
和 "si"
。
目标
我正在尝试检查输入字符串 不包含任何字符或字符串 但字典中的字符或字符串不区分大小写。
所以 "mdo"
的大小写不匹配,因为 m
就像字符串 do
一样被允许。相反 o
不一样,它有 o
不是允许的字符并且不包含整个允许的字符串 do
.
我奋斗的理由
可以否定 [^a-gm0-9]
和 (?!do|si)
,但我无法实现的是将它们放在单个正则表达式中以应用以下 PHP 代码:
<?php
$inputStr = 'mdo';
$rex = '/?????/i'; // the question subject
// if disallowed chars/strings are found...
if( preg_match($regex, $inputStr) == 1 )
return false; // the $inputStr is not valid
return true;
?>
因为两个级联 preg_matches 会破坏逻辑并且不起作用。
如何在单个正则表达式中混合字符检查和分组检查 "AND"?他们的位置无关紧要。
你可以使用这个模式:
return (bool) preg_match('~^(?:do|si|[a-gm0-9])*+\C~i', $inputStr);
这个想法是用 possessive quantifier 匹配重复组中从头开始的所有允许的字符和子字符串,并检查是否有单个字节 \C
剩余。由于量词是贪婪的占有欲,后面的单字节,如果找到,是不允许的。
注意,大多数时候,取反preg_match
函数更简单,例如:
return (bool) !preg_match('~^(?:do|si|[a-gm0-9])*$~iD', $inputStr);
(或者使用 +
量词,如果您不想允许空字符串)
好吧,我被卡住了,我找不到正则表达式提供给 PHP preg_match.
的正确形式我有两个字符串。说 "mdo"
和 "o"
,但它们可能真的很随机。
我有一个包含允许的字符和字符串的字典。
例如,允许的字符为 "a-gm0-9"
,允许的字符串为 "do"
和 "si"
。
目标
我正在尝试检查输入字符串 不包含任何字符或字符串 但字典中的字符或字符串不区分大小写。
所以 "mdo"
的大小写不匹配,因为 m
就像字符串 do
一样被允许。相反 o
不一样,它有 o
不是允许的字符并且不包含整个允许的字符串 do
.
我奋斗的理由
可以否定 [^a-gm0-9]
和 (?!do|si)
,但我无法实现的是将它们放在单个正则表达式中以应用以下 PHP 代码:
<?php
$inputStr = 'mdo';
$rex = '/?????/i'; // the question subject
// if disallowed chars/strings are found...
if( preg_match($regex, $inputStr) == 1 )
return false; // the $inputStr is not valid
return true;
?>
因为两个级联 preg_matches 会破坏逻辑并且不起作用。
如何在单个正则表达式中混合字符检查和分组检查 "AND"?他们的位置无关紧要。
你可以使用这个模式:
return (bool) preg_match('~^(?:do|si|[a-gm0-9])*+\C~i', $inputStr);
这个想法是用 possessive quantifier 匹配重复组中从头开始的所有允许的字符和子字符串,并检查是否有单个字节 \C
剩余。由于量词是贪婪的占有欲,后面的单字节,如果找到,是不允许的。
注意,大多数时候,取反preg_match
函数更简单,例如:
return (bool) !preg_match('~^(?:do|si|[a-gm0-9])*$~iD', $inputStr);
(或者使用 +
量词,如果您不想允许空字符串)