Я намагаюся побудувати регулярний вираз, який, в основному, допускає лише цифри, довжину 8 символів і не може бути порожнім, тобто "" чи мати 8 пробілів
Мені вдалося отримати два окремі регулярні вирази, які майже зроблять те, що я мав після: ^ (? s * $). + який не допускає порожніх рядків, але дозволяє пробіл. Також: ^ [0-9] + $ що дозволяє шукати лише номери.
Я хотів би об'єднати ці вирази regex, а також і у пункті, щоб відповідати рядкам довжиною 8 символів.
Будь-які поради про те, як я можу об'єднати те, що я маю до цих пір?
Відповіді:
6 за відповідь № 1Просто місце ^(?!s*$)
на початку вашого регулярного виразу. Спробуйте таким чином ^(?!s*$)[0-9s]{8}$
?
^(?!s*$)
як ви знаєте, перевірятиме, чи весь рядок є не тільки пробілами[0-9s]
буде відповідати будь-якій цифрі та пробілу{8}
означає точно 8 входжень елемента перед ним (у нашому випадку цифра або пробіл)
2 для відповіді № 2
Насправді неможливо дізнатися, як рядок може бути довжиною до 8 символів і містити лише цифри та бути пробілами, але для відповідності лише 8 цифр спробуйте це:
^d{8}$
1 для відповіді № 3
Ви можете вказати квантор, який гарантує, що ваш шаблон буде відповідати певній кількості цифр, наприклад: ^[0-9]{8}$
.
Редагувати: Хм, я неправильно зрозумів частину про білий простір раніше. Чи можна, щоб у рядку було зібрано пробіл, або просто навколо нього? Якщо перше, то мені доведеться переробити свою відповідь ^
і $
.
Редагувати v2: Pshemo має день.
0 для відповіді № 4
Спочатку зробіть перевірку довжини на рядку, щоб побачити, чи довжина її довжиною;)
Потім обрізати (щоб видалити пробіли на початку і в кінці) і зрівнятися з d+(s+d+)*
:
// No need to anchor the regex since we use .matches()
return input.length() == 8 && input.trim().matches("\d+(\s+\d+)*");
0 для відповіді № 5
^ [d | s] {8} $
або в java ...
String re = "^[\d|\s]{8}$";