First, let me start off with some advice.
Pro Tip #1
To provide a more user-friendly experience, use multiple validation rules, one for each field to validate. This will mark all fields that are missing separately.
Pro Tip #2
Use proper indentation and avoid mixing &&/|| and AND/OR. Mixing styles makes the rule harder to read. Choose one and stick with it, it'll make your life easier.
Your validation rule's logic can only fire when city, state, postal code, or first name is empty, and the phone is not blank and does not match the pattern.
You would need to put the phone block in with the rest.
We want to error when the phone is blank OR does not meet the pattern. By de Morgan's laws, we can translate your code to:
This is not the same logic as I just described, which should actually be:
Here's what your rule should look like:
$RecordType.Name = "Member",
$RecordType.Name = "Prospect"
ISBLANK( PersonMailingStreet ),
ISBLANK( PersonMailingPostalCode ),
(or, you can use || and &&, but I recommend you avoid mixing and matching)
Edited: Found an inverted logic bug that would have had incorrect results.