Counter-intuitive preg_match behavior - what is the cleanest way to match a range of characters?

StackOverflow https://stackoverflow.com/questions/18586526

Domanda

I am looking for ways to match a range of characters and assumed the following regEx would only match characters in the range of hex codes between 20 and 7E. However, it also matches chr(10) (line feed), in fact, the following prints "passed":

echo preg_match("/^[\x20-\x7E]*$/", chr(10)) ? 'passed' : 'failed';

Any idea why and how to match that range?

È stato utile?

Soluzione

chr(10) is end of line, so you should add modifier D.

If this modifier is set, a dollar metacharacter in the pattern matches only at the end of the subject string. Without this modifier, a dollar also matches immediately before the final character if it is a newline (but not before any other newlines).

//                               v
echo preg_match("/^[\x20-\x7E]*$/D", chr(10)) ? 'passed' : 'failed';
//                               ^
Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top