帮我用hivesql写一段正则匹配,能够筛选出合规的手机号
时间: 2023-02-08 13:53:24 浏览: 1863
在 Hive SQL 中,可以使用正则表达式来筛选手机号。下面是一段示例代码:
```
SELECT *
FROM table_name
WHERE regexp_like(column_name, '^((13[0-9])|(14[5|7])|(15([0-3]|[5-9]))|(17[013678])|(18[0,5-9]))\\d{8}$');
```
上面的代码将在 "table_name" 表中查询 "column_name" 列,筛选出符合中国大陆手机号格式的数据。
说明:
1. 正则表达式 '^((13[0-9])|(14[5|7])|(15([0-3]|[5-9]))|(17[013678])|(18[0,5-9]))\\d{8}$' 用来匹配大陆地区合法手机号。
2. regexp_like() 函数是 Hive SQL 中用来判断正则匹配的函数。
3. 如果要匹配其他国家的手机号,需要修改正则表达式,满足相应国家的手机号格式。
相关问题
用hive SQL写个字段去除空格后用正则匹配手机号的代码,’+86‘开头的数据也算合规
### 回答1:
```
SELECT
regexp_replace(trim(column_name), '^86', '') as phone_number
FROM
table_name
WHERE
regexp_like(trim(column_name), '^(86)?1[3-9]\\d{9}$')
```
这是一个使用 Hive SQL 删除字段中的空格,并使用正则表达式匹配手机号的示例代码。我们使用 `trim` 函数删除字段中的空格,并使用 `regexp_replace` 函数将字符串 '86' 替换为空字符。我们使用 `regexp_like` 函数来匹配满足条件的手机号,匹配规则为 '^(86)?1[3-9]\\d{9}$' 代表以1开头的13至19开头的11位数字, 也支持以86开头的号码.
### 回答2:
在Hive SQL中,可以使用正则表达式函数来去除空格并匹配手机号。首先,我们可以使用正则表达式函数`regexp_replace`去除手机号中的空格。然后,使用正则表达式函数`regexp_extract`匹配手机号。以下是示例代码:
```sql
SELECT
CASE WHEN regexp_extract(regexp_replace(phone_number, ' ', ''), '^(\+?86)?((13[0-9])|(14[5-9])|(15([0-3]|[5-9]))|(166)|(17[0-8])|(18[0-9])|(19[1|8|9]))\\d{8}$') IS NULL
THEN '非合规手机号'
ELSE '合规手机号'
END AS phone_status
FROM
your_table;
```
注解:
- `phone_number`为需要匹配的手机号字段名称,需替换为实际字段名称。
- `your_table`为表的名称,需替换为实际表的名称。
以上代码使用`regexp_replace`函数将手机号字段中的空格替换为空字符。然后使用`regexp_extract`函数匹配手机号,对合规手机号返回'合规手机号',对非合规手机号返回'非合规手机号'。
此代码同时允许手机号以'86'开头作为合规手机号。如果不需要将'86'开头作为合规手机号,请删除`(\+?86)?`的部分。
请注意,该代码只适用于中国的手机号格式。对于其他国家/地区的手机号格式,可能需要相应调整正则表达式的匹配规则。
### 回答3:
使用Hive SQL编写代码去除空格并使用正则表达式匹配手机号,同时识别以'86'开头的数据。
首先,假设我们有一个名为`table_name`的表,其中包含一个名为`phone_number`的字段,其数据类型为字符串。
以下是代码示例:
```sql
SELECT
CASE
WHEN REGEXP_EXTRACT(trim(phone_number), '^86?([1][3-9][0-9]{9})$') IS NOT NULL THEN '合规'
WHEN REGEXP_EXTRACT(trim(phone_number), '^[1][3-9][0-9]{9}$') IS NOT NULL THEN '合规'
ELSE '不合规'
END AS phone_compliance
FROM
table_name;
```
在上述代码中,我们使用`trim()`函数去除字符串中的空格。然后,我们使用正则表达式进行手机号匹配。
正则表达式`^86?([1][3-9][0-9]{9})$`用于匹配以'86'开头的手机号,其中`^`表示字符串的开始,`[1][3-9]`表示以1开头的第二位为3-9之间的数字,`[0-9]{9}`表示0-9之间的数字出现9次,`$`表示字符串的结束。
如果该正则表达式匹配成功,则返回结果为'合规',否则,我们使用正则表达式`^[1][3-9][0-9]{9}$`进行普通手机号的匹配,如果匹配成功则返回结果为'合规',否则返回结果为'不合规'。
以上代码可以用于检测包含手机号信息的数据是否合规,并根据匹配结果进行分类。
阅读全文