Регулярное выражение - разрешить пробел и любое количество цифр

1

моя действительная строка должна быть либо "1234" or " 1234"

разрешить one or zero space в начале

затем следует только любое количество digits

так что должно быть регулярным выражением для этого?

  • 0
    а как насчет "1234aa" это действительно?
  • 0
    нет, только цифры, нет алфавитов ... это поле цены ..
Показать ещё 2 комментария
Теги:

4 ответа

4
Лучший ответ

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

^ ?\d+$

который легче читать следующим образом:

^[ ]?\d+$

См. Демонстрацию.

Чтобы проверить, есть ли у вас совпадение, вы можете сделать (например):

if (subjectString.matches("[ ]?\\d+")) {
    // It matched!
    } 
else {  // nah, it didn't match...  } 

Здесь вам не нужны привязки ^ и $, потому что метод matches ищет точное совпадение.

объяснение

  • Якорь ^ утверждает, что мы находимся в начале строки. В зависимости от используемого метода эти якоря могут не понадобиться.
  • [ ]? соответствует нулю или одному пробелу. Скобки не нужны, но они облегчают чтение. Вы можете удалить их. Не используйте \s там, поскольку он также соответствует символам новой строки и вкладкам.
  • \d+ соответствует одной или нескольким цифрам
  • $ Anchor утверждает, что мы находимся в конце строки
  • 0
    К вашему сведению, добавлен пример кода Java. :)
  • 0
    @AvinashRaj В Java: \d => Соответствует одному символу, который является «цифрой» (только ASCII 0–9). Ссылка на символ Unicode, на которую вы ссылались, была из вопроса C #. :)
Показать ещё 4 комментария
3

Это должно быть \\s?\\d+

System.out.println(Pattern.matches("\\s?\\d+", "1234"));  // true
System.out.println(Pattern.matches("\\s?\\d+", " 1234"));  // true
System.out.println(Pattern.matches("\\s?\\d+", "  1234"));  // false

\s обозначает пробелы и ? означает нуль или одно появление. \d соответствует цифре с + значением по крайней мере одного появления.

Если разрешен только пробельный символ (например, нет вкладок), используйте ( )?\\d+

  • 0
    Да, именно поэтому я добавил последнее предложение только с пробелом. Слово «пространство» иногда может быть неоднозначным в этом вопросе.
  • 0
    Спасибо, понял. :)
2

Если ваши входные данные должны быть только одним пробелом (а не пробелом), значит, вам нужно регулярное выражение ?\d+ (обратите внимание на пробел перед "?").

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

\s?\d+

Символом пробелов может быть:

A space character
A tab character
A carriage return character
A new line character
A vertical tab character
A form feed character

В качестве примечания, если вам нужно отбросить всех символов после ваших цифр, для instace 1234fff не нужно сопоставлять, то вы можете исправить свое регулярное выражение: \s?\d+\b (это сделает ваше регулярное выражение иметь границу).

Не забудьте избежать обратных косых черт в java-коде, поэтому \s?\d+ будет \\s?\\d+

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

Изображение 174551

2

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

^\s?[0-9]+$

демонстрация

Объяснение:

  • ^ Утверждается, что мы находимся в начале линии.
  • \s? Разрешено ноль или одно пространство.
  • [0-9]+ Один или несколько номеров.
  • $ Утверждается, что мы находимся в конце строки.
  • 1
    Код @ zx81 исправлен.
  • 0
    \s все еще проблема, потому что она может соответствовать новым строкам, вертикальным вкладкам, вкладкам и т. Д.

Ещё вопросы

Сообщество Overcoder
Наверх
Меню