Вопрос:
У меня есть текстовый ввод, и я требую, чтобы он принимал только цифры (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
Я тестировал его в Интернете, используя
Вышеприведенное регулярное выражение не будет принимать пустые пробелы в начале. Вам нужно по крайней мере одну цифру. Если вы хотите совместить пустые места в начале, также измените его на ( d *s *d *) + $, который также примет пустые места