我需要一个正则表达式来验证手机号码和地址字段,但输入来自PSV文件(管道符号分隔值),即
XXXXXXXX|XXXXXXXXXXXXXXXXXXXX|XXXXXXXXXXXXXXXXXXXX|XXXXXXXXXXXXXX|XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX|XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX|XXXXXXXXXXXXXXXXXXXX|XXXXXXXXXXXXXXXXXXXX|XXXXXXXXXXXXXXXXXXXX|XXXXXXXXXXXXXXXXXXXX|XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX|XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX|XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX|XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX$XXXXX$XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX$XXXXXXXX$|XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX|XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX|XXXXXXXXXXXXXXXXXXXXXXXXXXXXXX|XXXXXXXXX|XXXXXXXXXXXXXX|XXXXXXXXXXXXXXXXXXXX|XXXXXXXX|XXXXXXXXXXXXXXXX|XXXXXXXXXXXXXXXX|XXXXXXXXXXXX|XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX|XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX|XXXXXXXXXXXXXXXXXXXX||
此输入以以下格式转换:
86082522|801213075672|NRIC|013333344444|SYED ZEESHAN||0107777777|0000000000|||||NO 3046|ROAD 12 MK.7$14000$,HEALE,PNG$PNG$||SHAID ABAD PAKPATAN|KALA|URB5467||8827|20151029|29/10/2015|28/12/2015|113.1000||BHALWAPUR RAWAPALNI KKOTA BANU|||
现在这个输入没问题且有效但是如果有些用户忘记添加移动地址字段和地址字段,那么它应该不允许保存在数据库中,现在我将举例说明无效的手机号码字段
86082522|801213075672|NRIC|013333344444|SYED ZEESHAN||8@#-777777|0000000000|||||NO 3046|ROAD 12 MK.7$14000$,HEALE,PNG$PNG$||SHAID ABAD PAKPATAN|KALA|URB5467||8827|20151029|29/10/2015|28/12/2015|113.1000||BHALWAPUR RAWAPALNI KKOTA BANU|||
现在上面的例子是无效的手机号码,因为它包含了一些字符。所以我需要一个可以删除这些字符的正则表达式。
答案 0 :(得分:1)
好的,这个怎么样。
$string = '86082522|801213075672|NRIC|013333344444|SYED ZEESHAN||0111123444443|0000000000|||||NO 3046|ROAD 12 MK.7$14000$,HEALE,PNG$PNG$||SHAID ABAD PAKPATAN|KALA|URB5467||8827|20151029|29/10/2015|28/12/2015|113.1000||BHALWAPUR RAWAPALNI KKOTA BANU|||';
$array = explode('|', $string);
if(preg_match('/^0\d{9,14}$/', $array[6])) {
echo 'true';
} else {
echo 'false';
}
Regex101演示:https://regex101.com/r/iN5oT5/1
我们要求字符串以0
开头,然后有9-14({9,14}
)个附加数字(\d
)。