/^(18[0-9]{9})|(15[0-9]{9})$/
this expression is equivalent to:
/(^18[0-9]{9})|(15[0-9]{9}$)/
is because the priority ratio of ^ and $is higher than |, so ^ matches 18 [0-9] {9} first
/^(18[0-9]{9})$|^(15[0-9]{9})$/
because the previous 11 bits have been matched successfully
your expression cannot match
at the beginning of 15.
^(18[0-9]{9})|(15[0-9]{9})$
your way of writing is equivalent to
^(18[0-9]{9})
or
(15[0-9]{9})$
, that is, the priority question, you need to add parentheses as follows:
^((18[0-9]{9})|(15[0-9]{9}))$
in fact, this js library already has API for verifying mobile phone numbers. Please refer to bee.js
.
/ ^ (18 [0-9] {9}) | (15 [0-9] {9}) $/
first of all, you need to understand what the rule you are writing means:
^ (18 [0-9] {9}) or (15 [0-9] {9}) $matches
translates as:
(beginning with 18 and 9 decimal numbers) or (15 and 9 decimal endings) match
then the data you give goes like this:
1844444444444444444444
since it is an or statement, it matches the beginning of 18 and 9 decimal numbers, so it naturally matches
.
can be changed to this / ^ (18 [0-9] {9}) $| ^ (15 [0-9] {9}) $/ match your desired mobile phone