0

有一种方法可以知道哪些字符与 preg_match 函数不匹配?例如:

preg_match('/^[a-z]*$/i', 'Hello World!');

是否有一些函数可以知道不正确的字符,在这种情况下是空格和“!”?


感谢您的回复,但您的示例中的问题是您没有指明字符串的开头和结尾。您的示例适用于另一个字符串中包含的字符串,而不适用于与我在模式中定义的字符串完全相同的字符串。

例如,如果我必须验证一个主题的意大利财政代码,它由一个格式如下的字符串组成:

XXX XXX YY X YY X YYY X (X = letter, Y = number - without spaces)

哪种模式是:

'/^[A-Z]{6}[0-9]{2}[A-Z]{1}[0-9]{2}[A-Z]{1}[0-9]{3}[A-Z]{1}$/i'

我必须验证与我在模式中定义的完全匹配的字符串。

如果我使用您的代码并且错误了 1 个(仅 1 个)字符,则整个字符串将作为错误返回。 http://eval.in/9178

反转模式的问题出现在复杂的模式中,其中插入了 AND 或 OR。

我想知道的是为什么 preg_match 会失败,而不仅仅是失败与否。

4

3 回答 3

2

你有没有尝试过这样的事情?

$nonMatchingCharacters = preg_replace('/[a-z]/', '', $wholeString);

这应该去掉“合法”字符,只留下您想在验证错误消息中提及的字符。

你也可以做其他的治疗,比如...

$nonMatchingCharactersArray = array_unique(explode('', $nonMatchingCharacters));

...如果你想要一个唯一的、不匹配的字符数组,而不仅仅是一个去掉了位的字符串。

于 2013-02-07T15:53:55.020 回答
0

That will indicate you the space and !

preg_match_all('/[^a-z]/i', 'Hello World!', $matches);

var_dump($matches);

http://eval.in/9132

于 2013-02-07T15:09:28.917 回答
0

只需删除与 preg_replace 匹配的所有内容,然后将剩余的内容拆分为一个数组。

<?php

$str = preg_replace('/([0-9]{2}[a-z]*)/i', '', '03Hello 02World!');

$characters = str_split($str);

var_dump($characters);

http://eval.in/9152

于 2013-02-07T17:03:00.540 回答