подтвердить адрес электронной почты и URL?Конвертировать из JavaScript в PHP - PullRequest
0 голосов
/ 19 сентября 2011

Я извлек следующий код из плагина jquery.validate, это действительно довольно сложно понять.Я хочу преобразовать их в PHP, и лучше, если вы поможете мне понять каждую часть следующих кодов регулярных выражений.

Подтвердите адрес электронной почты:

/ ^ ((([AZ] | \ d | [# \ $% & '* + - / = \ \ ^ _ {\|}~]|[\u00A0-\uD7FF\uF900-\uFDCF\uFDF0-\uFFEF])+(\.([a-z]|\d|[!#\$%&'\*\+\-\/=\?\^_!? {\ |} ~] | [\ u00A0- \ uD7FF \ uF900- \ uFDCF \ uFDF0- \uFFEF]) +) ) | ((\ x22) ((((\ x20 | \ x09) (\ x0D \ x0a)) (\ x20 | \ x09)? +) (([\x01- \ x08 \ x0b \ x0c \ x0e- \ x1f \ x7f] | \ x21 | [\ x23- \ X5b] | [\ x5d- \ x7E] | [\ u00A0- \ uD7FF \ uF900- \ uFDCF \ uFDF0-\ uFFEF]) | (\ ([\ x01- \ x09 \ x0b \ x0c \ x0d- \ x7f] | [\ u00A0- \ uD7FF \ uF900- \ uFDCF \ uFDF0- \ uFFEF])))) (((\ x20 | \ x09) (\ x0D \ x0a)) (\ x20 | \ x09)? +) (\ x22))) @ ((([AZ] |? \ d | [\ u00A0-\ uD7FF \ uF900- \ uFDCF \ uFDF0- \ uFFEF]) | (([AZ] | \ д | [\ u00A0- \ uD7FF \ uF900- \ uFDCF \ uFDF0- \ uFFEF]) ([AZ] | \ д |-. | | _ | ~ | [\ u00A0- \ uD7FF \ uF900- \ uFDCF \ uFDF0- \ uFFEF]) * ([AZ] | \ d | [\ u00A0- \ uD7FF \ uF900- \ uFDCF \ uFDF0- \uFFEF])))) + (([AZ] |. [\ u00A0- \ uD7FF \ uF900- \ uFDCF \ uFDF0- \ uFFEF]) | (([AZ] | [\ u00A0- \ uD7FF \ uF900- \ uFDCF\ uFDF0- \ uFFEF]) ([AZ] | \ d | -. | | _ | ~ | [\ u00A0- \ uD7FF \ uF900- \ uFDCF \ uFDF0- \ uFFEF]) * ([AZ] | [\ u00A0- \ uD7FF \ uF900- \ uFDCF \ УФОF0- \ uFFEF]))).? $ / I

Проверить адрес URL:

/ ^ (https? | Ftp): // ((((([AZ] | \ d | -.! | | _ | ~ | [\ u00A0- \ uD7FF \ uF900- \ uFDCF \ uFDF0- \ uFFEF]) | (% [\ да-е] {2}) | [\$ & '() * +, =] |:) * @) (((\ d | [1-9] \ d | 1 \ d \ d | 2 [0-4] \ d | 25 [0?-5]) (\ д |. [1-9] \ д | 1 \ д \ д | 2 [0-4] \ д | 25 [0-5]) (\ д |. [1-9] \д | 1 \ д \ д | 2 [0-4] \ д | 25 [0-5]) (\ д |. [1-9] \ д | 1 \ д \ д | 2 [0-4] \д | 25 [0-5])) | ((([AZ] | \ д | [\ u00A0- \ uD7FF \ uF900- \ uFDCF \ uFDF0- \ uFFEF]) | (([AZ] | \ д | [\ u00A0- \ uD7FF \ uF900- \ uFDCF \ uFDF0- \ uFFEF]) ([AZ] | \ d | -. | | _ | ~ | [\ u00A0- \ uD7FF \ uF900- \ uFDCF \ uFDF0- \ uFFEF]) * ([AZ] | \ д | [\ u00A0- \ uD7FF \ uF900- \ uFDCF \ uFDF0- \ uFFEF])))) + (([AZ] |. [\ u00A0- \ uD7FF \ uF900- \ uFDCF\ uFDF0- \ uFFEF]) | (([AZ] | [\ u00A0- \ uD7FF \ uF900- \ uFDCF \ uFDF0- \ uFFEF]) ([AZ] | \ d | -. | | _ | ~ | [\u00A0- \ uD7FF \ uF900- \ uFDCF \ uFDF0- \ uFFEF]) ([AZ] | [\ u00A0- \ uD7FF \ uF900- \ uFDCF \ uFDF0- \ uFFEF])))) (:.? \d )) (/ ((([AZ] | \ d | -. | | | ~ | [\ u00A0- \ uD7FF \ uF900- \ uFDCF \ uFDF0- \ uFFEF]) | (%[\ да-е] {2}) | [\ $ & '() * +, =] |:. | @) + (/ (([AZ] | \ d | - | | |~ | [\ u00A0- \ uD7FF \ uF900- \ uFDCF \ uFDF0- \ uFFEF]) | (% [\ да-е] {2}) | [\ $ & '() * +, =] |:| @) ) )) (\ ((([AZ] | \ d | -. | | _ | ~ | [\ U00A0- \ uD7FF \ uF900- \ uFDCF \ uFDF0- \ uFFEF])? |(% [\ да-е] {2}) | [\ $ & '() * +, =] |:? | @) | [\ uE000- \ uF8FF] | / | \) *) (# ((([AZ] | \ д | -. | | _ | ~ | [\ u00A0- \ uD7FF \ uF900- \ uFDCF \ uFDF0- \ uFFEF]) | (% [\ да-е] {2})| [! \ $ & '() * +,; =] |: | @) | / | \?) *)? $ / i

Одно место особенно смущает меня.Разве (\ x22) не символ B?Почему это просто не говорит B?Почему 0x22 в любом случае полезен для проверки адреса электронной почты?

Спасибо.

Обновление: я изменил его в код PHP,

$ pattern = "/ ^ ((([AZ] | \ d | [# \ $% & '* + - / = \ \ ^ _ {\|}~]|[\x{00A0}-\x{D7FF}\x{F900}-\x{FDCF}\x{FDF0}-\x{FFEF}])+(\.([a-z]|\d|[!#\$%&'\*\+\-\/=\?\^_! {\ |} ~?] | [\ х {00A0} - \ х {D7FF} \ х{F900} - \ х {FDCF} \ х {FDF0} - \ х {FFEF}]) +) ) | ((\ x22) ((((\ x20 | \ x09) (\ x0D\ x0a)) (\ x20 |? \ x09) +) (([\ x01- \ x08 \ x0b \ x0c \ x0e- \ x1f \ x7f] |? \ x21 | [\ x23- \ X5b] | [\ X5D- \ x7E] | [\ х {00A0} - \ х {D7FF} \ х {F900} - \ х {FDCF} \ х {FDF0} - \ х {FFEF}]) | (\ ([\ x01- \x09 \ x0b \ x0c \ x0d- \ x7f] | [\ х {00A0} - \ х {D7FF} \ х {F900} - \ х {FDCF} \ х {FDF0} - \ х {FFEF}])))) (((\ x20 | \ x09) (\ x0D \ x0a)) (\ x20 | \ x09)? +) (\ x22))) @ ((([AZ] |? \ d| [\ х {00A0} - \ х {D7FF} \ х {F900} - \ х {FDCF} \ х {FDF0} - \ х {FFEF}]) | (([AZ] | \ д | [\ х{00A0} - \ х {D7FF} \ х {F900} - \ х {FDCF} \ х {FDF0} - \ х {FFEF}]) ([AZ] | \ д | -. | | _ | ~ | [\ х {00A0} - \ х {D7FF} \ х {F900} - \ х {FDCF} \ х {FDF0} - \ х {FFEF}]) * ([AZ] | \ D | [\ х {00A0}- \ х {D7FF} \ х {F900} - \ х {FDCF} \ х {FDF0} - \ х {FFEF}])))) + (([AZ] |. [\ х {00A0} - \ х{D7FF} \ х {F900} - \ х {FDCF} \ х {FDF0} - \ х {FFEF}]) | (([AZ] | [\ х {00A0} - \ х {D7FF} \ х {F900} - \ {х} FDCF \ {х} FDF0 - \ {х} FFEF]) ([AZ] | \ D | - |. | _ | ~ | [\ х {00A0} - \ х {D7FF} \ х {F900} - \ х {FDCF} \ х {FDF0} - \ х {FFEF}]) * ([AZ] | [\ х {00A0} - \ х {D7FF} \х {F900} - \ х {FDCF} \ х {FDF0} - \ х {FFEF}]))) \ $ / у ".?;preg_match ($ pattern, "abc@def.com");

Это говорит,

Предупреждение: preg_match (): Сбой компиляции: несоответствующие скобки по смещению 406 в xxx в строке7.

Я не мог определить, где совпадение скобок.Я попытался сосчитать все скобки, и они выглядят хорошо.И смещение 406 не содержит скобок.

Ответы [ 2 ]

2 голосов
/ 19 сентября 2011

Не было бы хорошей / безопасной идеей взять функцию Javascript и просто скопировать выражение оттуда.Насколько я знаю, \ u и \ x - это escape-коды UTF-8, которые могут быть полезны для JS, но не так полезны в вашем состоянии PHP.

Существует множество отличных решений для проверки электронной почтыадрес и URL, вот пара, которую я получил от Google.

E-mail: http://www.linuxjournal.com/article/9585

URL: Проверка PHP / регулярное выражение для URL

Удачи и надеюсь, что это поможет,Шай.

1 голос
/ 19 сентября 2011

Вы ошибаетесь в своем последнем утверждении, \x22 равно " как в ASCII, так и в Unicode.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...