题解 | 电话号码格式校验
电话号码格式校验
https://www.nowcoder.com/practice/2c2453e909c04c29a04c11e9d6b2c769
本题的题目表述不是很清晰,从输出的结果中可以看出123-4567-890的记录没有放入结果集,所以以-分隔的格式的电话号码是要求必须是3-3-4形式的,使用正则表达式实现:
'^[1-9][0-9]{9}$|^[1-9][0-9]{2}-[0-9]{3}-[0-9]{4}$'
^和$:限定字符串的开头结尾
|:相当于OR,并列两种模式,一种是十个连续的数字,另一种是以-隔开的3-3-4格式的号码
两种模式号码第一位都不能是0,所以使用[1-9],后面都是任意数字,使用[0-9]即可,使用量词{n}限定数字个数
另外一种写法,中间部分括起来,省略一个^和$,效果也是一样的:
'^([1-9][0-9]{9}|[1-9][0-9]{2}-[0-9]{3}-[0-9]{4})$'
完整代码:
SELECT * FROM contacts WHERE phone_number REGEXP '^([1-9][0-9]{9}|[1-9][0-9]{2}-[0-9]{3}-[0-9]{4})$' ORDER BY id;