2010-09-11 3 views
3

Я использую это:Jquery Validate: Regexing неамериканскую PHONENUMBER

jQuery.validator.addMethod("regex2", function(value, element, param) { 
    return value.match(new RegExp("." + param + "$")); 
}); 

$("#phonenumber").rules("add", { regex2: "[0-9]+"}) 

для проверки телефона. Номер телефона должен быть не менее 7 цифр, я получил это регулярное выражение от elsewhere и использую параметр minlength=7, но это явно непригодно. Как это сделать?

Я живу в Венесуэле. Поэтому я думаю this is useless. Как я могу его изменить? В моей стране 0416-414 33 44 следует рассматривать как действительный ввод для номера телефона.

+0

Должно быть пустое место в конце или оно необязательно? Должно быть, это должно быть ровно одно пространство, или оно может быть больше одного? Должен ли он быть пространственным символом (U + 0020) или может быть любым пробелом? –

+0

это не должно быть пространство, я изменяю вопрос в соответствии с ответом alcuadrado, поскольку это кажется лучшим решением. – andandandand

ответ

2

Вы можете найти следующее регулярное выражение полезно, это в основном первые полоски все допустимые специальные символы, которые телефонный номер в любой точке мира могут содержать (пробелы, круглые скобки, +, -, ., ext), а затем подсчитывает цифры, если не менее 7.

$.validator.addMethod('phone', function(value, element) { 
    return this.optional(element) || (/^\d{7,}$/).test(value.replace(/[\s()+\-\.]|ext/gi, '')); 
}); 

Используйте его с <input class="phone">.

2

Вы косяк первой обрезки, а затем проверить, или просто добавить \s? перед $ в этой строке:

return value.match(new RegExp("." + param + "$")); 

изменить? для * принимать более одной пустой

+0

'\ b' означает границу слова, а не пробел. –

+0

Вы правы, я имею в виду \ s – alcuadrado

+0

на самом деле, обрезка кажется лучшим выбором. Я хочу принимать символы как - и пробел для пользователя, чтобы писать, но не считать их цифрами, поскольку у меня есть требование, по крайней мере, 7 цифр в телефоне. – andandandand

3

Предполагая:

  • Символ пробела может быть пробелов.
  • Пространство не является обязательным.
  • Может быть более одного места.
  • Должно быть не менее семи цифр.

Тогда измените "[0-9]+" на "[0-9]{7,}\s*$".

Похоже, что "." неверен и должен быть "^".

+0

Проблема заключается в том, что он убивает проверку. он будет считать пробелы цифрами, пользователь может поместить только пробелы в поле телефона. – andandandand

2

Вы уверены, что . в правой части регулярного выражения? Интересно, должен ли это быть кареткой ^, которая является эквивалентом $: она привязывает регулярное выражение, поэтому вся строка должна соответствовать регулярному выражению.

Вы можете добавить пробелы в регулярное выражение, но более элегантным решением было бы сначала обрезать его. Обрезка строки удаляет пробелы с начала и конца. Любой из них будет работать:

// Trim value before matching against regex. 
return jQuery.trim(value).match(new RegExp("^" + param + "$")); 

// Allow spaces at beginning or end with " *" (space + asterisk). 
return value.match(new RegExp("^ *" + param + " *$")); 

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

// Add parentheses for robustness. 
return jQuery.trim(value).match(new RegExp("^(?:" + param + ")$")); 

Таким образом, ваше новое регулярное выражение будет работать, даже если параметр, скажем, this|that. Вы бы хотели сопоставить ^(this|that)$, а не ^this|that$, так как последний был бы эквивалентен неправильному (^this)|(that$).

+0

Это было полезно и освещалось. Я закончил тем, что использовал его в другом месте. Благодарю. – andandandand