There is no one good way here's a few tips that I use on a couple of forums.
Don't allow signature links until they have proved themselves.
Don't allow profile links.
Don't allow links in posts until you trust the member.
Block live links from "guests" AND search engines.
Genuine,
USEFUL members don't really care about live links in forum posts.
Make it as useless as possible for them to hang around and post their useless junk.
block hotmail.com, yahoo.everything, live.com, gmail.com, sify.com & mail.ru email addresses plus any *.in, *.pk *.vn email hosts from registering.
Do
NOT allow unverified email addresses
Do
NOT allow "guest" posting.
Block the entire IP ranges for India, Pakistan, Vietnam, China, Russian and Romania for a start.
Use the stopforumspam.com plugin to block known spammers
block usernames that contain "coach", "bags", "nike", "shoes", "seo", "expert", "cvv", "weightloss", "diet", "loan", "online", "credit", "card", "money", "vanhire", "carhire" plus all the sex, porn and drug related words you can think of or find.
CAPTCHA on registration is fairly useless as the spammers pay drones (usually Indian or Pakistan "freelancers" or WAHM armies) to mass register on forums.
If your forum allows it block more than one registration per IP for fifteen minutes, it doesn't stop them but it makes the drones work harder.
read st
http://spam-ip.com/how-to-block-forum-spam.php
http://www.stopfourumspam.com register for their API