Регулярное выражение Только цифры и пробелы

Вопрос: У меня есть текстовый ввод, и я требую, чтобы он принимал только цифры (0-9) и пробелы (""). Текущее значение regexp для проверки этого входа: /((d{1,})(s{1,})?){1,}/ Что означает: одна или несколько групп основаны на первой группе из одной или нескольких цифр и необязательной второй группы из одного или нескольких пустых пространств Это позволит мне вводить

Вопрос:

У меня есть текстовый ввод, и я требую, чтобы он принимал только цифры (0-9) и пробелы (“”). Текущее значение regexp для проверки этого входа:

/((d{1,})(s{1,})?){1,}/

Что означает: одна или несколько групп основаны на первой группе из одной или нескольких цифр и необязательной второй группы из одного или нескольких пустых пространств

Это позволит мне вводить значения как: 999999 (только цифры) или » » (только пробелы) или 91 08 8510 903 (сочетание цифр и пробелов). Но на самом деле, я также могу вставить aaa или другие символы.

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

рассечение

Ваше регулярное выражение не принимает только буквы:

/((d{1,})(s{1,})?){1,}/.test(‘aaa’) // false

Фактически, любой символ принимается, если вход содержит хотя бы одну цифру:

/((d{1,})(s{1,})?){1,}/.test(‘a1a’) // true

Сказав это, позвольте обезжирить жир из вашего рисунка:

«{1,}» equals «+» -> ((d+)(s+)?)+ «(.+)?» equals «.*» -> ((d+)s*)+ useless brackets -> (d+s*)+

Этот результат можно перевести на: “одну или несколько цифр (d+), за которыми следуют ноль или более пробелов (s*), один или несколько раз (()+), где угодно во входном файле”. В качестве альтернативы мы могли бы сказать: “по крайней мере, одна цифра, где бы ни было на входе”.

Вам нужно заменить “где угодно на входе” на “от начала до конца ввода”. Это разрешено следующими специальными символами: ^ (начало ввода) и $ (конец ввода). Позвольте сделать кучу тестов, чтобы увидеть, как они работают:

requirement regex input .test() ——————————————————————— must contain at least one digit /d+/ ‘a1a’ true must start with at least one digit /^d+/ ‘1a’ true must start with at least one digit /^d+/ ‘a1’ false must end with at least one digit /d+$/ ‘1a’ false must end with at least one digit /d+$/ ‘a1’ true only digits from the beginning to the end /^d+$/ ‘1a1’ false

Предложение

Только цифры, потенциально разделенные одним пробелом: /^d+( d+)*$/.

^ beginning of the input d+ a digit, one or more times ( d+)* a whitespace + same as above, zero or more times $ end of the input

Пример использования:

var r = /^d+( d+)*$/; var isValid = r.test(‘ 1 ‘); // false var isValid = r.test(‘1 1’); // true var isValid = r.test(‘1 1’); // false

Подробнее о регулярных выражениях: .

Ответ №1

Попробуй это

$pattern = ‘/^[0-9 ]+$/’; if ( preg_match ($pattern, $text) ) { echo ‘allowed’; } Ответ №2

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

/(d+s*d*)+$/

Визуализируйте результаты здесь http://regex101.com/r/dE5uR8

Я тестировал его в Интернете, используя

http://regexpal.com/

Вышеприведенное регулярное выражение не будет принимать пустые пробелы в начале. Вам нужно по крайней мере одну цифру. Если вы хотите совместить пустые места в начале, также измените его на ( d *s *d *) + $, который также примет пустые места

Оцените статью
Добавить комментарий