Looks like the ereg functions can only handle unsigned 8-bit integers, e.g. 0-255, in the {} braces.
I'm not sure what the Perl-compatible equivalent [man]preg_match/man's limitation is, but I know it's larger than 500. Besides, I never use the ereg functions anymore since they are slower, less efficient, and less functional than the preg_ equivalent functions.
To convert your code, your if() statements might look like these:
if (!preg_match('/^[a-z[:blank:]\.`\'\-]{1,30}$/i', $city))
// ...
if (!preg_match('/^[[:blank:][:punct:][:alnum:][:space:]]{1,500}$/', $listingdescription))
Note that I didn't use the case-insensitive 'i' modifier in the second if() statement, since the "alnum" named character class already incluedes "a-zA-Z".