How does to_tsquery and to_tsvector decide which characters to omit?
They are alphanumeric in some alphabet, just not the one you want to use.

You can alter your text search configuration to drop the types of tokens you do not want.  You should probably copy and alter, not alter in place.

CREATE TEXT SEARCH CONFIGURATION ascii_only ( COPY = pg_catalog.english );
alter text search configuration ascii_only drop mapping for word;
select * from to_tsvector('ascii_only', '平仮名ひらがな dogs');


Yields:

"'dog':1"


This is just a minimal example, you will probably need to drop the mappings for other token types as well, chosen from this list.  You might not be able to get exactly what you want, for example there is no asciinumword, so there is no way keep 'dog1' but reject '平仮名ひらがな1'.  So in that case you would have to implement your own non-default parser, or use functions (hopefully making them inefficient is optional--we might be able to help with that).

You can use ts_debug to see what is going on.  A word that is entirely ASCII letters [a-zA-Z] gets tokenized to 'asciiword', and not tokenized to 'word'.  So a better name for 'word' might be 'word excluding asciiword'.  So by dropping the mapping for 'word', you are excluding words other than asciiwords.  This means dropping not only words that are entirely foreign, but also words with accents.  It sounded like you were OK with either dropping the accent, or dropping the entire word, but maybe not.

But something with a mixture of letters and numbers is not tokenized to either 'word' or 'asciwword', but rather to 'numword', so would not be excluded unless you also dropped 'numword' in addition to 'word'.

If these don't do what you want and you need to use a function, I don't know what you want the function to do precisely, so it is hard to give an example.  If you go that route and implement the function that does what you want and find it not efficient enough, you can start a new post on that topic.