Строка ошибки «Ссылка на объект, не установленная на экземпляр объекта.» указывает, что вы не назначили экземпляр объекта объектной ссылке, и все же вы получаете доступ к свойствам / методам этого объекта.
например: скажем, у вас есть класс под названием myClass и он содержит одно свойство prop1.
public Class myClass
{
public int prop1 {get;set;}
}
Теперь вы получаете доступ к этому prop1 в каком-то другом классе, как показано ниже:
public class Demo
{
public void testMethod()
{
myClass ref = null;
ref.prop1 = 1; //This line throws error
}
}
выше строки выдает ошибку, потому что ссылка класса myClass объявлена, но не создана, или экземпляр объекта не назначается referecne этого класса.
Чтобы исправить это, вам нужно создать экземпляр (присвоить объект ссылке на этот класс).
public class Demo
{
public void testMethod()
{
myClass ref = null;
ref = new myClass();
ref.prop1 = 1;
}
}
Я думаю, что проблема намного проще: вы забыли указать модификатор u
. Свойства символа Юникода: доступны только в режиме UTF-8 .
Ваше регулярное выражение должно быть:
// unicode letters, apostrophe, hyphen, space
$namePattern = '/^[-\' \p{L}]+$/u';
Прежде всего, ваша жизнь будет намного проще, если вы будете использовать одиночные апострофы вместо двойных кавычек при написании их - вам нужна только одна обратная косая черта. Во-вторых, следует также включить сочетание меток \pM
. Если вы найдете символ, который не соответствует, пожалуйста, узнайте его кодовую точку Юникода, а затем вы можете использовать http://www.fileformat.info/info/unicode/ , чтобы выяснить, где он находится. Я нашел http://hsivonen.iki.fi/php-utf8/ бесценным инструментом при отладке с помощью свойств UTF-8 (не забудьте перевести его в шестнадцатеричный код перед попыткой поиска: array_map('dechex', utf8ToUnicode($text))
).
Например, Ă окажется http://www.fileformat.info/info/unicode/char/0102/index.htm и будет в Лу, и поэтому L должен соответствовать ему, и он подходит для меня. Другой символ - http://www.fileformat.info/info/unicode/char/5f20/index.htm , а также isLetter и действительно подходит для меня. У вас есть таблицы символов Unicode, скомпилированные в?
Если вы хотите заменить Unicode old pattern
на new pattern
, вы должны написать:
$text = preg_replace('/\bold pattern\b/u', 'new pattern', $text);
Таким образом, ключ здесь - u
модификатор
Примечание: ваш сервер php version
shoud будет как минимум PHP 4.3.5
, как указано здесь php.net | Модификаторы паттерна
u (PCRE_UTF8) Этот модификатор включает дополнительные функции PCRE, которые несовместимы с Perl. Строки шаблонов рассматриваются как UTF-8. Этот модификатор доступен с PHP 4.1.0 или выше в Unix и с PHP 4.2.3 на win32. UTF-8 справедливость шаблона проверяется с PHP 4.3.5.
blockquote>Спасибо
AgreeOrNot
, которые дают мне этот ключ здесь preg_replace сопоставить целое слово в арабскомЯ пробовал это, и он работал в localhost, но когда я пытаюсь его на удаленном сервере, это не сработало, и я обнаружил, что php.net начинает использовать модификатор
u
в PHP 4.3.5. , Я обновляю версию php и работает. Важно знать, что этот метод очень полезен для арабских пользователей (عربي), потому что, как я считаю, unicode - лучший кодировщик для арабского языка, а замена не будет если вы не используете модификатор
u
, см. следующий пример, он должен работать с вами
$text = preg_replace('/\bمرحبا بك\b/u', 'NEW', $text);