3v4l.org

run code in 300+ PHP versions simultaneously
<?php function validEmail($email) { $isValid = true; $atIndex = strrpos($email, "@"); if (is_bool($atIndex) && !$atIndex) { $isValid = false; } else { $domain = substr($email, $atIndex+1); $local = substr($email, 0, $atIndex); $localLen = strlen($local); $domainLen = strlen($domain); if ($localLen < 1 || $localLen > 64) { // local part length exceeded $isValid = false; } else if ($domainLen < 1 || $domainLen > 255) { // domain part length exceeded $isValid = false; } else if ($local[0] == '.' || $local[$localLen-1] == '.') { // local part starts or ends with '.' $isValid = false; } else if (preg_match('/\\.\\./', $local)) { // local part has two consecutive dots $isValid = false; } else if (!preg_match('/^[A-Za-z0-9\\-\\.]+$/', $domain)) { // character not valid in domain part $isValid = false; } else if (preg_match('/\\.\\./', $domain)) { // domain part has two consecutive dots $isValid = false; } else if (!preg_match('/^(\\\\.|[A-Za-z0-9!#%&`_=\\/$\'*+?^{}|~.-])+$/', str_replace("\\\\","",$local))) { // character not valid in local part unless // local part is quoted if (!preg_match('/^"(\\\\"|[^"])+"$/', str_replace("\\\\","",$local))) { $isValid = false; } } if ($isValid && !(checkdnsrr($domain,"MX") || checkdnsrr($domain,"A"))) { // domain not found in DNS $isValid = false; } } return $isValid; } $email = 's+s@ged.de'; var_dump(validEmail($email));
Finding entry points
Branch analysis from position: 0
1 jumps found. (Code = 62) Position 1 = -2
filename:       /in/7VZiN
function name:  (null)
number of ops:  8
compiled vars:  !0 = $email
line      #* E I O op                           fetch          ext  return  operands
-------------------------------------------------------------------------------------
   54     0  E >   ASSIGN                                                   !0, 's%2Bs%40ged.de'
   56     1        INIT_FCALL                                               'var_dump'
          2        INIT_FCALL                                               'validemail'
          3        SEND_VAR                                                 !0
          4        DO_FCALL                                      0  $2      
          5        SEND_VAR                                                 $2
          6        DO_ICALL                                                 
          7      > RETURN                                                   1

Function validemail:
Finding entry points
Branch analysis from position: 0
2 jumps found. (Code = 46) Position 1 = 9, Position 2 = 11
Branch analysis from position: 9
2 jumps found. (Code = 43) Position 1 = 12, Position 2 = 14
Branch analysis from position: 12
1 jumps found. (Code = 42) Position 1 = 114
Branch analysis from position: 114
1 jumps found. (Code = 62) Position 1 = -2
Branch analysis from position: 14
2 jumps found. (Code = 47) Position 1 = 32, Position 2 = 34
Branch analysis from position: 32
2 jumps found. (Code = 43) Position 1 = 35, Position 2 = 37
Branch analysis from position: 35
1 jumps found. (Code = 42) Position 1 = 99
Branch analysis from position: 99
2 jumps found. (Code = 46) Position 1 = 100, Position 2 = 112
Branch analysis from position: 100
2 jumps found. (Code = 47) Position 1 = 105, Position 2 = 110
Branch analysis from position: 105
2 jumps found. (Code = 43) Position 1 = 113, Position 2 = 114
Branch analysis from position: 113
1 jumps found. (Code = 62) Position 1 = -2
Branch analysis from position: 114
Branch analysis from position: 110
Branch analysis from position: 112
Branch analysis from position: 37
2 jumps found. (Code = 47) Position 1 = 39, Position 2 = 41
Branch analysis from position: 39
2 jumps found. (Code = 43) Position 1 = 42, Position 2 = 44
Branch analysis from position: 42
1 jumps found. (Code = 42) Position 1 = 99
Branch analysis from position: 99
Branch analysis from position: 44
2 jumps found. (Code = 47) Position 1 = 47, Position 2 = 51
Branch analysis from position: 47
2 jumps found. (Code = 43) Position 1 = 52, Position 2 = 54
Branch analysis from position: 52
1 jumps found. (Code = 42) Position 1 = 99
Branch analysis from position: 99
Branch analysis from position: 54
2 jumps found. (Code = 43) Position 1 = 59, Position 2 = 61
Branch analysis from position: 59
1 jumps found. (Code = 42) Position 1 = 99
Branch analysis from position: 99
Branch analysis from position: 61
2 jumps found. (Code = 43) Position 1 = 67, Position 2 = 69
Branch analysis from position: 67
1 jumps found. (Code = 42) Position 1 = 99
Branch analysis from position: 99
Branch analysis from position: 69
2 jumps found. (Code = 43) Position 1 = 74, Position 2 = 76
Branch analysis from position: 74
1 jumps found. (Code = 42) Position 1 = 99
Branch analysis from position: 99
Branch analysis from position: 76
2 jumps found. (Code = 43) Position 1 = 87, Position 2 = 99
Branch analysis from position: 87
2 jumps found. (Code = 43) Position 1 = 98, Position 2 = 99
Branch analysis from position: 98
2 jumps found. (Code = 46) Position 1 = 100, Position 2 = 112
Branch analysis from position: 100
Branch analysis from position: 112
Branch analysis from position: 99
Branch analysis from position: 99
Branch analysis from position: 51
Branch analysis from position: 41
Branch analysis from position: 34
Branch analysis from position: 11
filename:       /in/7VZiN
function name:  validEmail
number of ops:  116
compiled vars:  !0 = $email, !1 = $isValid, !2 = $atIndex, !3 = $domain, !4 = $local, !5 = $localLen, !6 = $domainLen
line      #* E I O op                           fetch          ext  return  operands
-------------------------------------------------------------------------------------
    3     0  E >   RECV                                             !0      
    5     1        ASSIGN                                                   !1, <true>
    6     2        INIT_FCALL                                               'strrpos'
          3        SEND_VAR                                                 !0
          4        SEND_VAL                                                 '%40'
          5        DO_ICALL                                         $8      
          6        ASSIGN                                                   !2, $8
    8     7        TYPE_CHECK                                   12  ~10     !2
          8      > JMPZ_EX                                          ~10     ~10, ->11
          9    >   BOOL_NOT                                         ~11     !2
         10        BOOL                                             ~10     ~11
         11    > > JMPZ                                                     ~10, ->14
   10    12    >   ASSIGN                                                   !1, <false>
         13      > JMP                                                      ->114
   14    14    >   INIT_FCALL                                               'substr'
         15        SEND_VAR                                                 !0
         16        ADD                                              ~13     !2, 1
         17        SEND_VAL                                                 ~13
         18        DO_ICALL                                         $14     
         19        ASSIGN                                                   !3, $14
   15    20        INIT_FCALL                                               'substr'
         21        SEND_VAR                                                 !0
         22        SEND_VAL                                                 0
         23        SEND_VAR                                                 !2
         24        DO_ICALL                                         $16     
         25        ASSIGN                                                   !4, $16
   16    26        STRLEN                                           ~18     !4
         27        ASSIGN                                                   !5, ~18
   17    28        STRLEN                                           ~20     !3
         29        ASSIGN                                                   !6, ~20
   19    30        IS_SMALLER                                       ~22     !5, 1
         31      > JMPNZ_EX                                         ~22     ~22, ->34
         32    >   IS_SMALLER                                       ~23     64, !5
         33        BOOL                                             ~22     ~23
         34    > > JMPZ                                                     ~22, ->37
   21    35    >   ASSIGN                                                   !1, <false>
         36      > JMP                                                      ->99
   23    37    >   IS_SMALLER                                       ~25     !6, 1
         38      > JMPNZ_EX                                         ~25     ~25, ->41
         39    >   IS_SMALLER                                       ~26     255, !6
         40        BOOL                                             ~25     ~26
         41    > > JMPZ                                                     ~25, ->44
   25    42    >   ASSIGN                                                   !1, <false>
         43      > JMP                                                      ->99
   26    44    >   FETCH_DIM_R                                      ~28     !4, 0
         45        IS_EQUAL                                         ~29     ~28, '.'
         46      > JMPNZ_EX                                         ~29     ~29, ->51
         47    >   SUB                                              ~30     !5, 1
         48        FETCH_DIM_R                                      ~31     !4, ~30
         49        IS_EQUAL                                         ~32     ~31, '.'
         50        BOOL                                             ~29     ~32
         51    > > JMPZ                                                     ~29, ->54
   28    52    >   ASSIGN                                                   !1, <false>
         53      > JMP                                                      ->99
   29    54    >   INIT_FCALL                                               'preg_match'
         55        SEND_VAL                                                 '%2F%5C.%5C.%2F'
         56        SEND_VAR                                                 !4
         57        DO_ICALL                                         $34     
         58      > JMPZ                                                     $34, ->61
   31    59    >   ASSIGN                                                   !1, <false>
         60      > JMP                                                      ->99
   32    61    >   INIT_FCALL                                               'preg_match'
         62        SEND_VAL                                                 '%2F%5E%5BA-Za-z0-9%5C-%5C.%5D%2B%24%2F'
         63        SEND_VAR                                                 !3
         64        DO_ICALL                                         $36     
         65        BOOL_NOT                                         ~37     $36
         66      > JMPZ                                                     ~37, ->69
   34    67    >   ASSIGN                                                   !1, <false>
         68      > JMP                                                      ->99
   35    69    >   INIT_FCALL                                               'preg_match'
         70        SEND_VAL                                                 '%2F%5C.%5C.%2F'
         71        SEND_VAR                                                 !3
         72        DO_ICALL                                         $39     
         73      > JMPZ                                                     $39, ->76
   37    74    >   ASSIGN                                                   !1, <false>
         75      > JMP                                                      ->99
   38    76    >   INIT_FCALL                                               'preg_match'
         77        SEND_VAL                                                 '%2F%5E%28%5C%5C.%7C%5BA-Za-z0-9%21%23%25%26%60_%3D%5C%2F%24%27%2A%2B%3F%5E%7B%7D%7C%7E.-%5D%29%2B%24%2F'
         78        INIT_FCALL                                               'str_replace'
         79        SEND_VAL                                                 '%5C%5C'
         80        SEND_VAL                                                 ''
         81        SEND_VAR                                                 !4
         82        DO_ICALL                                         $41     
         83        SEND_VAR                                                 $41
         84        DO_ICALL                                         $42     
         85        BOOL_NOT                                         ~43     $42
         86      > JMPZ                                                     ~43, ->99
   41    87    >   INIT_FCALL                                               'preg_match'
         88        SEND_VAL                                                 '%2F%5E%22%28%5C%5C%22%7C%5B%5E%22%5D%29%2B%22%24%2F'
         89        INIT_FCALL                                               'str_replace'
         90        SEND_VAL                                                 '%5C%5C'
         91        SEND_VAL                                                 ''
         92        SEND_VAR                                                 !4
         93        DO_ICALL                                         $44     
         94        SEND_VAR                                                 $44
         95        DO_ICALL                                         $45     
         96        BOOL_NOT                                         ~46     $45
         97      > JMPZ                                                     ~46, ->99
   42    98    >   ASSIGN                                                   !1, <false>
   46    99    > > JMPZ_EX                                          ~48     !1, ->112
        100    >   INIT_FCALL                                               'checkdnsrr'
        101        SEND_VAR                                                 !3
        102        SEND_VAL                                                 'MX'
        103        DO_ICALL                                         $49     
        104      > JMPNZ_EX                                         ~50     $49, ->110
        105    >   INIT_FCALL                                               'checkdnsrr'
        106        SEND_VAR                                                 !3
        107        SEND_VAL                                                 'A'
        108        DO_ICALL                                         $51     
        109        BOOL                                             ~50     $51
        110    >   BOOL_NOT                                         ~52     ~50
        111        BOOL                                             ~48     ~52
        112    > > JMPZ                                                     ~48, ->114
   48   113    >   ASSIGN                                                   !1, <false>
   51   114    > > RETURN                                                   !1
   52   115*     > RETURN                                                   null

End of function validemail

Generated using Vulcan Logic Dumper, using php 8.0.0


preferences:
152.46 ms | 1411 KiB | 26 Q