如果有,我当然不会看到它.我们正在对驾驶执照进行磁条读取.数据似乎不一致.驾驶执照应遵循的标准规定了任何一个领域可以拥有的长度限制.我无法解决的部分是如何解析这些数据.
例如,字段可以允许总共13个字符,但仅使用8个字符.在这种情况下,将始终有一个插入符号分隔符结束字符串的该部分.然而,这里是棘手的部分,如果一个字段恰好是13(13个允许的),则没有结束符号分隔符和没有正确的填充.所有数据都一起运行.
这是两个示例字符串.
%CAMISSION HILLSSMITH$JOHN$JIM$JR^1147 SOMESTREET^?
%CALOS ANGELES^DOE$JOHN$CARL^14324 MAIN ST APT 5^?
Run Code Online (Sandbox Code Playgroud)
使用PHP,我该怎么做?我真的很感激这一点.我真的很难过.
好的,我们走了.我使用该x标志使正则表达式更具可读性并能够对其进行评论.
根据发布的@EboMike规范,每个字段都有一个最大长度,^如果它短于该长度则终止.该名称是一个复合字段,$用作姓氏,名字,中间名和后缀之间的分隔符.地址也是如此,$如果地址有多行,则使用该地址.
$licenses = array(
'%CAMISSION HILLSSMITH$JOHN$JIM$JR^1147 SOMESTREET^?',
'%CALOS ANGELES^DOE$JOHN$CARL^14324 MAIN ST APT 5^?'
);
foreach ($licenses as $license) {
preg_match(
'@
^%
(.{2}) # State, 2 chars
([^^]{0,12}.) # City, 13 chars, delimited by ^
([^^]{0,34}.) # Name, 35 chars, delimited by ^
([^^]{0,28}.) # Address, 29 chars, delimited by ^
\?$
@x',
$license,
$fields
);
$state = $fields[1];
$city = rtrim($fields[2], '^');
$name = explode('$', rtrim($fields[3], '^'));
$address = explode('$', rtrim($fields[4], '^'));
echo "$license\n";
echo "STATE: "; print_r($state); echo "\n";
echo "CITY: "; print_r($city); echo "\n";
echo "NAME: "; print_r($name);
echo "ADDRESS: "; print_r($address);
echo "\n";
}
Run Code Online (Sandbox Code Playgroud)
输出:
CAMISSION HILLSSMITH$JOHN$JIM$JR^1147 SOMESTREET^
STATE: CA
CITY: MISSION HILLS
NAME: Array
(
[0] => SMITH
[1] => JOHN
[2] => JIM
[3] => JR
)
ADDRESS: Array
(
[0] => 1147 SOMESTREET
)
CALOS ANGELES^DOE$JOHN$CARL^14324 MAIN ST APT 5^
STATE: CA
CITY: LOS ANGELES
NAME: Array
(
[0] => DOE
[1] => JOHN
[2] => CARL
)
ADDRESS: Array
(
[0] => 14324 MAIN ST APT 5
)
Run Code Online (Sandbox Code Playgroud)