Целое число, разделенное запятой - PullRequest
3 голосов
/ 22 мая 2010

Какое регулярное выражение для целого числа разделяется запятой? Он также может содержать пробел между запятой, и поле не обязательно, что означает, что оно может быть пустым.

123,98549
43446

и т.д ..

Ответы [ 4 ]

7 голосов
/ 22 мая 2010

Это очень простой вариант, который может вам подойти:

/^[\d\s,]*$/

Она будет соответствовать любой строке, если она содержит только цифры, пробелы и запятые. Это означает, что «123 456» пройдет, но я не знаю, если это проблема.

/^\s*(\d+(\s*,\s*\d+)*)?\s*$/

У этого есть следующие результаты:

""                true
"123"             true
"123, 456"        true
"123,456  , 789"  true
"123 456"         false
"   "             true
"  123   "        true
", 123 ,"         false

Пояснение:

/^\s*(\d+(\s*,\s*\d+)*)?\s*$/
 1 2 3 4 5 6 7 8  9  a b c d

1. ^   Matches the start of the string
2. \s  Matches a space  * means any number of the previous thing
3. (   Opens a group
4. \d  Matches a number. + means one or more of the previous thing
5. (   Another group
6. \s* 0 or more spaces
7. ,   A comma
8. \s* 0 or more spaces
9. \d+ 1 or more numbers
a. *   0 or more of the previous thing. In this case, the group starting with #5
b. ?   Means 0 or 1 of the previous thing. This one is the group at #3
c. \s* 0 or more spaces
d. $   Matches the end of the string
2 голосов
/ 22 мая 2010

Предполагая, что вы хотите список целых чисел: (\d+)

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

1 голос
/ 22 мая 2010

Я не знаю, что вы имеете в виду под полем

не требуется, что означает, что может быть пустым

Кроме того, я думаю, что это должно сработать

/^((\b)*[0-9]+(\b)*[,])*(\b)*[0-9]+(\b)$/
0 голосов
/ 22 мая 2010

Этот вопрос должен быть более точным: например, вы принимаете пробелы между цифрами? Вы принимаете запятую в начале / конце? Вы принимаете пробел перед запятой? Вы принимаете несколько последовательных пробелов? вы принимаете пробелы в начале / конце?

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

/^ *([0-9]+( *, *[0-9]+)*)? *$/
  • "": верно
  • "": правда
  • "123": правда
  • "123,45": правда
  • "123, 45, 67": правда
  • "123": правда
  • "1 2 3": false
  • ", 45": false
  • "123": false

Ключ при написании регулярного выражения для сопоставления списку элементов "E", разделенных разделителем "S", заключается в том, что вам непременно придется написать сопоставитель "E" дважды (здесь это просто "[0-9] + ").

  • принцип шаблона E (SE) *
  • E - это «[0-9] +»: просто последовательность цифр
  • S - это "*, *" (обратите внимание на пробелы): запятая с дополнительными пробелами до и после

на данный момент имеем:

/^[0-9]+( *, *[0-9]+)*$/

мы немного улучшили его, поэтому он также принимает пробелы в начале / конце, только пробелы и пустые строки:

/^ *([0-9]+( *, *[0-9]+)*)? *$/

Заметьте, я лично предпочитаю использовать [0-9] вместо \ d, я думаю, что читать не так сложно.

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