检查自定义安全号码

时间:2018-07-12 16:27:18

标签: php regex

我尝试检查带有正则表达式的ocr字符串中是否存在自定义安全号码。我永远不知道正确的电话号码。我只想了解字符串中是否存在自定义安全号码。

例如:

// 81130790K038 (always 12 characters, 8x 0-9, 1x A-Z, 3x 0-9)

这里是我所拥有的,但它与正确的ssn不匹配:

// At the end there is: " 8 11 30 7 90K0 38 "    
$example_str = "SGA/SIE 405801/11700/69 Personal? Nr IGe?urlsdalun smfltpgngen?mßxllige .If .lr Juni 2 01 8 0 3 .0 7 .2 01 8 Blatt 1 0 0 0 69 1 3,0 7190 4 . roilcfessmn Fretbetrag am. Frerbetrag mtl.? DSA Glettzone lät.ng? VJ Ur1 üb. unAnspl. Url.Tg.gen. IResturlaub SV-Nummer .kk oJ 8 11 30 7 90K0 38 ";

if(preg_match('/([\s]{1})([0-9\s]{8,16})([A-Z0-9a-z]{1})([0-9\s]{3,6})([\s]{1})/', $example_str, $matches, PREG_OFFSET_CAPTURE)
{
   print_r($matches);
}

结果:

Array
(
    [0] Array
        (
            [0] 1 0 0 0 69 1 
            [1] 133
        )

    [1] Array
        (
            [0]  
            [1] 133
        )
    [2] Array
        (
            [0] 1 0 0 0 
            [1] 134
        )
    [3] Array
        (
            [0] 6
            [1] 142
        )
    [4] Array
        (
            [0] 9 1
            [1] 143
        )
    [5] Array
        (
            [0]  
            [1] 146
        )
)

请问有人可以帮我处理正则表达式吗?

最好的问候, olli

更新 preg_match_all 可以帮助我,谢谢。

1 个答案:

答案 0 :(得分:2)

根据格式,您可以使用以下模式:

(?<!\S)(?:[0-9] *){8}[A-Z](?: *[0-9]){3}(?!\S)

(?<!\S)检查之前是否存在不是空格的字符,而(?!\S)之后是否存在空格。

如果需要,可以用\h(水平空白字符类)或\s替换任何种类的空白来替换每个文字空间。