In this Composer tutorial learn about the differences between all these characters:
Depending on your dependency manager you can define version constraints using wildcards (*), comparators like <=, logical operators (, often means AND and | means OR), etc… Using logical operators you can mix and match different version constraints to build even more complex ones. For example >=0.9.0,<0.11.0 means everything that matches 0.9.* and 0.10.*, but can also be noted as 0.9.* || 0.10.*.
* ~4.1.3 means >=4.1.3,<4.2.0,
* ~4.1 means >=4.1.0,<5.0.0 (most used),
* ~0.4 means >=0.4.0,<1.0.0,
* ~4 means >=4.0.0,<5.0.0.The caret sign is slightly different:
* ^4.1.3 (most used) means >=4.1.3,<5.0.0,
* ^4.1 means >=4.1.0,<5.0.0, same as ~4.1 but:
* ^0.4 means >=0.4.0,<0.5.0, this is different from ~0.4 and is more useful for semver.
* ^4 means >=4.0.0,<5.0.0 which is the same as ~4 and 4.*.
A little easier to remember than the php date format however this isn’t even all the options. The docs say you can also use a range and a hyphen range.
What are the asterisk, tilde, and caret used for in Composer? is a post from Laravel News.