regex PHP -检查字符串是否匹配提供的掩码

eyh26e7m  于 2023-04-22  发布在  PHP
关注(0)|答案(1)|浏览(134)

我想检查字符串是否匹配以这种方式提供的掩码&&&&-&&&&(其中&是一个随机数或字符)。掩码每次都可以不同,例如&&-&&&&&-&&甚至&&-&&&-&。只允许数字和标准字母(大写和小写)。
有什么简单的方法可以实现吗?某种正则表达式?
谢谢你的任何提示。
我知道如何静态地实现这一点,但不确定动态版本。
'/^\d{5}-\d{3}$/'这将匹配前5个数字,然后是'-'和另外3个数字,但就像我说的,它是静态的。如果有这样的掩码&&-&-&&&呢?

a11xaf1n

a11xaf1n1#

使用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

相关问题