2012-11-05 2 views
4

Я использую happyJS и использовать регулярное выражение для телефона под проверкуJS: регулярное выражение для чисел и пробелов?

phone: function (val) { 
     return /^(?:[0-9]+$)/.test(val); 
    } 

Однако это только позволяет номера. Я хочу, чтобы пользователь мог вводить пробелы, а также как

238 238 45383 

Любая идея, почему return /^(?:[0-9 ]+$)/.test(val); не делает трюк?

+4

'/^(?: [0-9] + $) /. Test (" 238 238 45383 ");' возвращает true. Кажется, работает. –

+1

Это регулярное выражение работает для меня:/ – Lloyd

+0

@ raina77ow Ну, вы были абсолютно правы! Прости. Я только узнал, что происходит кеширование на стороне сервера, что не перезагрузит мой файл сценария. Я тестировал его 100 раз, но это не показало эффекта. Теперь все работает нормально. Любая да, ваше право - мой предоставленный код работает отлично. – matt

ответ

5

Это мое предложенное решение:

/^(?=.*\d)[\d ]+$/.test(val) 

(?=.*\d) утверждает, что на входе имеется хотя бы одна цифра. В противном случае вход может содержать только пробелы.

Обратите внимание, что это не создает ограничений по количеству цифр (только для того, чтобы убедиться, что они не менее 1 цифры), или там, где пространство должно появиться на входе.

+0

@ raina77ow: Для '?:' Не очень важно, я думаю. Я просто имитирую код OP. И ваши тесты просто неправильны и хуже, чем решение OP. '/ [0-9] /' будет проверять наличие цифры, '/^[0-9] /' проверяет наличие цифры или пробела в начале строки. Даже если вы добавите '+' позади, они все еще ошибаются. – nhahtdh

+0

Однако это сработало бы! Кажется, отлично работает для меня – matt

+0

@nhahtdh Это должно быть '/ [^ 0-9] /', конечно. Дело в том, что проще построить (и поддерживать) две простые вещи, которые работают вместе, чем одна сложная вещь в разработке, - и регулярные выражения (как правило) не являются исключением для этого. – raina77ow

3

Попробуйте

phone: function (val) { 
    return /^(\s*[0-9]+\s*)+$/.test(val); 
} 

По крайней мере один номер должен присутствовать выше, чтобы добиться успеха, но, пожалуйста, посмотрите на regex example here

+0

lol this FORCES - пространство для присутствия, а не разрешение дополнительных пространств. используйте это вместо: return /^([0-9\s)+/.test(val); –

+0

@AndyLorenz Пожалуйста, проверьте свое регулярное выражение, так как оно фактически не работает :) – Bruno

+0

well spotted: return /^([0-9\s]+)$/.test(val); –

0

я лично использую этот код и он работает правильно: функция validateMobile (моб) { вар я =/^ 09 [0-9] {9} $/ если (mob.match (вос)) return true; else return false; }

+0

Формат номера телефона зависит от страны. Префикс 09 в вашем регулярном выражении уже сделал некоторое предположение о формате числа. – nhahtdh

 Смежные вопросы

  • Нет связанных вопросов^_^