我想检查字符串是否匹配以这种方式提供的掩码&&&&-&&&&(其中&是一个随机数或字符)。掩码每次都可以不同,例如&&-&&&,&&-&&甚至&&-&&&-&。只允许数字和标准字母(大写和小写)。有什么简单的方法可以实现吗?某种正则表达式?谢谢你的任何提示。我知道如何静态地实现这一点,但不确定动态版本。'/^\d{5}-\d{3}$/'这将匹配前5个数字,然后是'-'和另外3个数字,但就像我说的,它是静态的。如果有这样的掩码&&-&-&&&呢?
&&&&-&&&&
&&-&&&
&&-&&
&&-&&&-&
'/^\d{5}-\d{3}$/'
&&-&-&&&
a11xaf1n1#
使用preg_quote转义模式中的特殊符号,使用str_replace将字符串转换为正则表达式(将每个&替换为[0-9a-zA-Z])。就像这样:
preg_quote
str_replace
&
[0-9a-zA-Z]
<?php function validate($pattern, $input) { $escaped = preg_quote($pattern); $regex = '/^'.str_replace('&','[0-9a-zA-Z]',$escaped).'$/'; return preg_match($regex, $input); } echo validate('&-&', 'asd')."\n"; // 0 echo validate('&&&-&&&', 'asd-123')."\n"; // 1 echo validate('&-&', 'a-1')."\n"; // 1 echo validate('&&&{}[]().+*\\^$', 'asd{}[]().+*\\^$')."\n"; // 1 ?>
演示here。
1条答案
按热度按时间a11xaf1n1#
使用
preg_quote
转义模式中的特殊符号,使用str_replace
将字符串转换为正则表达式(将每个&
替换为[0-9a-zA-Z]
)。就像这样:
演示here。