Как убрать новую строку, каретку и горизонтальную табуляцию из начала и конца строки? - PullRequest
0 голосов
/ 05 сентября 2018

Я беру данные от пользователей, которые могут быть очень ненадежными. Поэтому перед сохранением в БД PostgreSQL мне нужно удалить все лишние символы в начале и конце строки.

  1. Этого можно достичь?

    '   \n \t \n \r\n abc_def_\n xyz \r\n  ' to 'abc_def_\n xyz'
    
  2. Есть ли еще какие-либо пробелы, как символы, о которых я должен заботиться?

    \n  newline
    \r  carriage return
    \t  horizontal tab
    whitespace
    

Ответы [ 2 ]

0 голосов
/ 05 сентября 2018

Для этого уже есть функция. нет необходимости использовать регулярные выражения.

select trim( e'\t\n\r\ ' from ' your string ' );
0 голосов
/ 05 сентября 2018

Я бы подумал, что \s охватит все пробелы, но, похоже, это не относится к Postgres 'REGEXP_REPLACE. Вместо этого я получил хороший пробег, используя класс символов [\r\n\t ] для представления всего пробела, который вы хотите удалить. Кроме того, вы действительно хотите обрезать такие пробелы только в начале и конце столбца, а не в середине, поэтому мы можем искать по следующему шаблону регулярных выражений:

^[\r\n\t ]*|[\r\n\t ]*$

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

WITH yourTable AS (
    SELECT '   \n \t \n \r\n abc_def_\n xyz \r\n  '::text AS col
)

SELECT
    col,
    REGEXP_REPLACE(col, '^[\\r\\n\\t ]*|[\\r\\n\\t ]*$', '', 'g') AS col_updated
FROM yourTable;

enter image description here

Демо

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