Могу ли я использовать регулярное выражение JavaScript в PHP как оно есть - PullRequest
5 голосов
/ 12 апреля 2010

Я использую регулярное выражение в javascript и хочу также выполнить проверку на стороне сервера с тем же регулярным выражением. Нужно ли изменить его, чтобы сделать его совместимым, или он будет работать как есть.

Как использовать регулярные выражения PHP. Пожалуйста, приведите небольшой пример.

Заранее спасибо

EDIT

Для проверки электронной почты

var pattern = new RegExp(/^(("[\w-\s]+")|([\w-]+(?:\.[\w-]+)*)|("[\w-\s]+")([\w-]+(?:\.[\w-]+)*))(@((?:[\w-]+\.)*\w[\w-]{0,66})\.([a-z]{2,6}(?:\.[a-z]{2})?)$)|(@\[?((25[0-5]\.|2[0-4][0-9]\.|1[0-9]{2}\.|[0-9]{1,2}\.))((25[0-5]|2[0-4][0-9]|1[0-9]{2}|[0-9]{1,2})\.){2}(25[0-5]|2[0-4][0-9]|1[0-9]{2}|[0-9]{1,2})\]?$)/i);

Для телефона нет подтверждения

var pattern = new RegExp(/^\(?(\d{3})\)?[- ]?(\d{3})[- ]?(\d{4})$/);

Ответы [ 4 ]

3 голосов
/ 12 апреля 2010

PHP регулярные выражения основаны на PCRE (регулярное выражение, совместимое с Perl). Пример (найти цифры):

preg_match('/^[0-9]*$/', 'my01string');

См. php документация .

Регулярные выражения Javascript немного отличаются (ECMA).

var patt1 = new RegExp("e");
document.write(patt1.test("The best things in life are free"));

См. здесь для таблицы сравнения.

3 голосов
/ 12 апреля 2010

Предполагается, что работает для большинства шаблонов, за исключением экранирования специальных символов и обратной косой черты, но не обратного, в php regex есть функции, которые похожи на javascript как взгляд за выражениями.

javascript : /[a-z]+/
php        : '/[a-z]+/'

Например,

var pattern = new RegExp(/^\(?(\d{3})\)?[- ]?(\d{3})[- ]?(\d{4})$/);

будет '/^\(?(\d{3})\)?[- ]?(\d{3})[- ]?(\d{4})$/' в php

2 голосов
/ 12 апреля 2010

Вы должны использовать одну из следующих функций preg_match или preg_match_all . И, если повезет, вам не нужно изменять свое регулярное выражение. PHP регулярное выражение использует классическое регулярное выражение Perl, поэтому совпадение будет выглядеть preg_match_all('/([a-zA-Z0-9]+)/', $myStringToBeTested, $results);

Позднее редактировать:

$string="test@mail.com";

if(preg_match('/^(("[\w-\s]+")|([\w-]+(?:\.[\w-]+)*)|("[\w-\s]+")([\w-]+(?:\.[\w-]+)*))(@((?:[\w-]+\.)*\w[\w-]{0,66})\.([a-z]{2,6}(?:\.[a-z]{2})?)$)|(@\[?((25[0-5]\.|2[0-4][0-9]\.|1[0-9]{2}\.|[0-9]{1,2}\.))((25[0-5]|2[0-4][0-9]|1[0-9]{2}|[0-9]{1,2})\.){2}(25[0-5]|2[0-4][0-9]|1[0-9]{2}|[0-9]{1,2})\]?$)/', $string))
    echo "matches!";
else
    echo "doesn't match!";

Наслаждайтесь!

1 голос
/ 12 апреля 2010

В PHP мы используем функцию preg_match .

$email_pattern = '/^(("[\w-\s]+")|([\w-]+(?:\.[\w-]+)*)|("[\w-\s]+")([\w-]+(?:\.[\w-]+)*))(@((?:[\w-]+\.)*\w[\w-]{0,66})\.([a-z]{2,6}(?:\.[a-z]{2})?)$)|(@\[?((25[0-5]\.|2[0-4][0-9]\.|1[0-9]{2}\.|[0-9]{1,2}\.))((25[0-5]|2[0-4][0-9]|1[0-9]{2}|[0-9]{1,2})\.){2}(25[0-5]|2[0-4][0-9]|1[0-9]{2}|[0-9]{1,2})\]?$)/i';

$phoneno_pattern = '^/\(?(\d{3})\)?[- ]?(\d{3})[- ]?(\d{4})$/';

if(preg_match($email_pattern,$input_email)) {
 // valid email.
}

if(preg_match($phoneno_pattern,$input_ph)) {
 // valid ph num.
}

Вы могли бы использовать регулярное выражение напрямую в качестве аргумента функции вместо использования переменной.

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