Регулярное выражение в js может содержать пробелы в начале символа после или в конце, но не должно содержать пробелы [дублировать]

Я читал некоторые вопросы о PInvoke, и я остановился здесь. Я не знаю, действительно ли проблема по-прежнему актуальна для вас, но я решил опубликовать свой ответ будущим читателям.

Это ваш последний комментарий к ответу Дарина Димитрова. Когда размер выделенной памяти неизвестен, типичным решением является вызов неуправляемой функции с нулевым указателем и получение размера в выходном параметре. Затем мы выделяем необходимое пространство и снова вызываем неуправляемую функцию.

Пример ниже:

  // MANAGED SIDE IntPtr ptr = IntPtr.Zero;  int size = 0;  myFunc (ptr, размер);  ptr = Marshal.AllocHGlobal (размер);  myFunc (ptr, размер);  // Делаем вашу работу .. Marshal.FreeHGlobal (ptr);  // UNMANEGED SIDE int myFunc (void * dest, size_t & amp; size) {if (dest == NULL) // вычисляет размер. Size = 'resul' return 0;  } // создаем массив и копируем все элементы memcopy (dest, ..., size);  // освободить все выделенное пространство в неуправляемом и возврате успешного возврата 0;  }  
12
задан GEOCHET 28 March 2012 в 18:35
поделиться

7 ответов

Я не уверен, что вам нужен RegEx. Почему бы просто не вызвать метод Trim() вашего языка, а затем убедиться, что результирующая строка не пуста?

16
ответ дан SHAZ 16 August 2018 в 03:50
поделиться
  • 1
    Разве это не обрезает какое-либо пустое пространство ... Мне все равно нужно разрешить пробел между словами - например. Чикаго, Иллинойс (требуется пространство между запятой и капиталом I). – user699242 11 April 2011 в 15:12
  • 2
    Конечно, это зависит от языка, но большинство методов Trim () устраняют только пустое пространство на любом конце строки. Кроме того, вам не нужно использовать обрезанную строку, если вы этого не хотите. Просто Trim () - строка, которая является белым пробелом, вернет пустую строку, которую легко проверить. – dlev 11 April 2011 в 15:13
  • 3
    О, круто!! Я попробую. Спасибо. Кстати, это простой JavaScript. – user699242 11 April 2011 в 15:18
  • 4
    Закончилось использование функции обрезки jQuery, и она отлично работала! Большое спасибо за все предложения и помощь! – user699242 11 April 2011 в 15:44

Вы можете использовать простой:

^(?=.*\S).+$

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

См. rubular .

5
ответ дан Alex 16 August 2018 в 03:50
поделиться

Просто используйте \s*, чтобы избежать одного или нескольких пробелов в регулярном выражении между двумя словами.

Например, "Mozilla/ 4.75" и "Mozilla/4.75" оба могут быть сопоставлены следующим регулярным выражением:

[A-Z][a-z]*/\s*[0-9]\.[0-9]{1,2}

Добавление \s* соответствует нулю, одно или несколько пробелов между двумя словами.

-1
ответ дан Brian Moeskau 16 August 2018 в 03:50
поделиться

Ниже вы ответите на свой вопрос, но см. мою дополнительную заметку:

^(?!\s*$)[-a-zA-Z0-9_:,.' ']{1,100}$

Объяснение: (?!\s*$) является отрицательным просмотром . Это означает: «Следующие символы не могут соответствовать подшаблону \s*$». Когда вы принимаете подшаблон во внимание, это означает: «Следующие символы не могут быть ни пустой строкой, ни строкой пробела до конца, поэтому после этой точки в ней должен быть по крайней мере один символ без пробелов Струна." Если у вас есть это правило, вы можете разрешить пробелы в своем классе символов.

Дополнительная заметка: я не думаю, что ваш ' ' делает то, что вы намереваетесь. Похоже, вы пытались представить пространственный символ, но регулярное выражение интерпретирует ' как буквальный апостроф. Внутри класса символов ' ' будет означать «соответствовать любому символу, который является либо ', либо пробельным символом, либо '» (обратите внимание, что второй символ ' является избыточным). Я подозреваю, что вам больше нравится:

^(?!\s*$)[-a-zA-Z0-9_:,.\s]{1,100}$
6
ответ дан Justin Morgan 16 August 2018 в 03:50
поделиться
  • 1
    Это похоже на то, что я искал, но по какой-то причине пустые пробелы по-прежнему передают регулярное выражение в моем скрипте. Любые идеи, почему это может быть? – user699242 11 April 2011 в 15:04
  • 2
    @ user699242 - Хм. Кажется, он работает правильно: rubular.com/r/V8nlkU7E5R и с некоторыми буквами, брошенными в: rubular.com/r/8qjj4Z2PWs . На каком языке регулярного выражения вы используете? – Justin Morgan 11 April 2011 в 16:44
  • 3
    Я считаю, это самый правильный ответ. Отрицательный поиск делает именно то, что требуется. – Ben Hughes 20 April 2016 в 01:39

Это очень просто: .*\S.*

Для этого требуется один непространственный символ в любом месте. Синтаксис регулярного выражения предназначен для регулярных выражений, совместимых с Perl 5, если у вас есть другой язык, синтаксис может немного отличаться.

27
ответ дан Roland Illig 16 August 2018 в 03:50
поделиться
  • 1
    Просто заметил это. Удалили и извинились. – dlev 8 April 2011 в 20:44
  • 2
    Тем не менее, это не соответствует максимальному значению 100 символов. Ваш .* также шире, чем класс персонажа. – Justin Morgan 8 April 2011 в 21:13
  • 3
    Я не читал 100 как требование, только как то, что пытался сделать оригинальный плакат. Предел может быть выражен как регулярное выражение, но поскольку регулярные выражения не могут считать символы, это было бы неприятностью для записи. В этом случае гораздо проще полностью игнорировать регулярные выражения и написать s = s.trim(); if (s.length() >= 1 && s.length() <= 100) { ... } – Roland Illig 10 April 2011 в 00:29
  • 4
    Не будет ли эта функция отделки также удалять пробел между словами? – user699242 11 April 2011 в 15:05
  • 5
    Это, конечно, зависит от используемого вами языка программирования. Я часто использую (Java, Python, Perl) только в начале и в конце. – Roland Illig 11 April 2011 в 20:00

Если мы хотели применить валидации только с разрешенным набором символов, то я попытался с помощью USERNAME_REGEX = /^(?:\s*[.\-_]*[a-zA-Z0-9]{1,}[.\-_]*\s*)$/;

  • Строка может содержать любое количество пробелов в начале или в конце или в промежутке, но будет содержать по крайней мере, один буквенно-цифровой символ.
  • Необязательные символы ., _ , - также разрешены, но строка должна иметь один буквенно-цифровой символ.
0
ответ дан Sandeep Sharma 16 August 2018 в 03:50
поделиться

Попробуйте это регулярное выражение:

^[^\s]+(\s.*)?$

Это означает один или несколько символов, которые не являются пробелами, а затем, возможно, пробелом, за которым следует что-либо.

-1
ответ дан True Soft 16 August 2018 в 03:50
поделиться
  • 1
    Это выражение не допускает пробелов. – dlev 8 April 2011 в 20:40
  • 2
    Это позволило бы не только пробелы. – David Thornley 8 April 2011 в 20:40
  • 3
    Вы правы ... я его изменю – True Soft 8 April 2011 в 20:42
  • 4
    Это не допускает пробелов в начале. Требование состояло в том, что строка не может быть всех пространств. – Justin Morgan 11 April 2011 в 16:46
Другие вопросы по тегам:

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