Необходимо принимать только символ% в качестве входной строки - PullRequest
1 голос
/ 02 ноября 2011

Я хочу принять только символ% (необязательно) в качестве строковой переменной с числом, как при вводе в процентах.Например, 1000% или 100% или, возможно, 2000% или ввод простой строки как 1000 или 2000.

Можем ли мы сделать это с помощью регулярного выражения?или, может быть, какая-то другая проверка.

Пожалуйста, помогите

Ответы [ 5 ]

2 голосов
/ 02 ноября 2011
^[0-9]+%?$

при условии, что требуется хотя бы одна цифра и разрешены только положительные числа (или 0).

Если вы также хотите разрешить десятичные дроби (вы могли упомянуть об этом в своем вопросе), попробуйте

^[0-9]+(?:\.[0-9]+)?%?$

Это позволяет любое положительное целое или десятичное число (но не сокращенные формы, такие как .1 или 1.).Экспоненциальная запись, конечно, не поддерживается.

0 голосов
/ 02 ноября 2011

На основании этого комментария:

кажется, что он идеально работает с такими шаблонами, как 1000%, 100, но теперь проблемы с десятичными значениями, такими как 101.50 или 199.50%

^[-+]?\d*\.?\d+\b%?$

Объяснение:

"
^        # Assert position at the beginning of the string
[-+]     # Match a single character present in the list “-+”
   ?        # Between zero and one times, as many times as possible, giving back as needed (greedy)
[0-9]    # Match a single character in the range between “0” and “9”
   *        # Between zero and unlimited times, as many times as possible, giving back as needed (greedy)
\.       # Match the character “.” literally
   ?        # Between zero and one times, as many times as possible, giving back as needed (greedy)
[0-9]    # Match a single character in the range between “0” and “9”
   +        # Between one and unlimited times, as many times as possible, giving back as needed (greedy)
\b       # Assert position at a word boundary
%        # Match the character “%” literally
   ?        # Between zero and one times, as many times as possible, giving back as needed (greedy)
\$        # Assert position at the end of the string (or before the line break at the end of the string, if any)
"

В качестве примечания: Вы действительно должны были учесть дополнительную часть из ответа @Tim.Взгляните на учебник, предложенный другими ответами.

0 голосов
/ 02 ноября 2011

Попробуйте следующее регулярное выражение

^[+-]?\d+(\.\d+)?%?$

Должно работать с десятичными числами

0 голосов
/ 02 ноября 2011

Абсолютно. Похоже, что здесь вы также хотите выполнить санитарную обработку, поэтому "[0-9] {1,}%" или "[0-9] *.? [0-9] {1,}%", чтобы убедиться, что вы соответствуете дробному проценты.

Обычно я мог бы сказать, jfgi, но это было слишком (забавно. РЕДАКТИРОВАТЬ)

http://www.regular -expressions.info / reference.html

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

Надеюсь, это поможет!

0 голосов
/ 02 ноября 2011

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

^\d+(\.\d+)?%?$
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...