The only way to say this was once a very simple one:
I haven't any money.
You can still say this today, but it sounds very formal because it is so old-fashioned. The reason this has fallen out of use is that for a long time now, English has required do support when negating any verb other than those on a short list that doesn't even include do itself (have, be, will, may, ...).
Technically, have is on the list. But it is now understood to be there only because it is an auxiliary. When you use have to express possession, it is not an auxiliary but a full verb. It seems inappropriate or awkward to grant it the privilege of negation without do support when it acts as a full verb.
There are two widespread strategies for avoiding this awkwardness:
- When have acts as a full verb, treat it like every other full verb and use do support: "I don't have any money." This logical solution has become the standard in American English.
- As the role of have as an auxiliary has become dominant and its function as a full verb has moved into the background, use another full verb instead: get or have got. (I guess this started with have got, but now get is also often heard on its own with this meaning - especially in ambiguous contexts in which the original meaning of get would also fit.) Now it's clear how to negate: "I haven't got any money." This solution is still very widespread in British English. Note that similar phenomena have occurred in other languages as well. E.g. Spanish tener (original meaning hold) now fills the gap that was left when haber (have) became an auxiliary only.
Both ways of negating have are perfectly good English. As far as I can tell, people have a preference for one style or the other depending on where they grew up, but nobody seems to select between them to express any fine nuances of meaning. In fact, there don't seem to be any.