Пусть регулярное выражение принимает шведских символов и работает на моем сайте [дубликат]

A NullReferenceException бросается, когда мы пытаемся получить доступ к свойствам нулевого объекта или когда значение строки становится пустым, и мы пытаемся получить доступ к строковым методам.

Например:

  1. При использовании метода string пустой строки:
    string str = string.Empty;
    str.ToLower(); // throw null reference exception
    
  2. Когда свойство нулевого объекта доступно:
    Public Class Person {
        public string Name { get; set; }
    }
    Person objPerson;
    objPerson.Name  /// throw Null refernce Exception 
    
12
задан tchrist 29 March 2012 в 19:13
поделиться

3 ответа

Я думаю, что проблема намного проще: вы забыли указать модификатор u . Свойства символа Юникода: доступны только в режиме UTF-8 .

Ваше регулярное выражение должно быть:

// unicode letters, apostrophe, hyphen, space
$namePattern = '/^[-\' \p{L}]+$/u';
23
ответ дан NikiC 26 August 2018 в 01:55
поделиться

Прежде всего, ваша жизнь будет намного проще, если вы будете использовать одиночные апострофы вместо двойных кавычек при написании их - вам нужна только одна обратная косая черта. Во-вторых, следует также включить сочетание меток \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, скомпилированные в?

0
ответ дан chx 26 August 2018 в 01:55
поделиться

Если вы хотите заменить 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.

Спасибо AgreeOrNot, которые дают мне этот ключ здесь preg_replace сопоставить целое слово в арабском

Я пробовал это, и он работал в localhost, но когда я пытаюсь его на удаленном сервере, это не сработало, и я обнаружил, что php.net начинает использовать модификатор u в PHP 4.3.5. , Я обновляю версию php и работает

. Важно знать, что этот метод очень полезен для арабских пользователей (عربي), потому что, как я считаю, unicode - лучший кодировщик для арабского языка, а замена не будет если вы не используете модификатор u, см. следующий пример, он должен работать с вами

$text = preg_replace('/\bمرحبا بك\b/u', 'NEW', $text);

0
ответ дан Community 26 August 2018 в 01:55
поделиться
Другие вопросы по тегам:

Похожие вопросы: