Формат поля "Строковое поле"

Есть все кроме телефона, а он, я считаю, нужен.

#1 24 июля 2015 в 14:39
Я не специалист в программировании, поэтому не пинайте сильно.
Имеем Строковое поле и у него есть форматы:
— Поле должно быть заполнено
— Только целые числа
— Только латинские буквы и цифры
— Адрес электронной почты
— Уникальное значение

Может кто то сделать чтоб был формат телефонный номер?
потому как ни один из текущих не подходит под номер, ведь это не только цифры и имеет определенное количество символов.
Сейчас у меня работает так:
Подключил сторонний скрипт в templates/TMPLName/controllers/content/item_form.tpl.php
  1.  
  2. /*
  3. jQuery Masked Input Plugin
  4. Copyright (c) 2007 - 2014 Josh Bush (digitalbush.com)
  5. Licensed under the MIT license (http://digitalbush.com/projects/masked-input-plugin/#license)
  6. Version: 1.4.0
  7. */
  8. !function(a){"function"==typeof define&&define.amd?define(["jquery"],a):a("object"==typeof exports?require("jquery"):jQuery)}(function(a){var b,c=navigator.userAgent,d=/iphone/i.test(c),e=/chrome/i.test(c),f=/android/i.test(c);a.mask={definitions:{9:"[0-9]",a:"[A-Za-z]","*":"[A-Za-z0-9]"},autoclear:!0,dataName:"rawMaskFn",placeholder:"_"},a.fn.extend({caret:function(a,b){var c;if(0!==this.length&&!this.is(":hidden"))return"number"==typeof a?(b="number"==typeof b?b:a,this.each(function(){this.setSelectionRange?this.setSelectionRange(a,b):this.createTextRange&&(c=this.createTextRange(),c.collapse(!0),c.moveEnd("character",b),c.moveStart("character",a),c.select())})):(this[0].setSelectionRange?(a=this[0].selectionStart,b=this[0].selectionEnd):document.selection&&document.selection.createRange&&(c=document.selection.createRange(),a=0-c.duplicate().moveStart("character",-1e5),b=a+c.text.length),{begin:a,end:b})},unmask:function(){return this.trigger("unmask")},mask:function(c,g){var h,i,j,k,l,m,n,o;if(!c&&this.length>0){h=a(this[0]);var p=h.data(a.mask.dataName);return p?p():void 0}return g=a.extend({autoclear:a.mask.autoclear,placeholder:a.mask.placeholder,completed:null},g),i=a.mask.definitions,j=[],k=n=c.length,l=null,a.each(c.split(""),function(a,b){"?"==b?(n--,k=a):i[b]?(j.push(new RegExp(i[b])),null===l&&(l=j.length-1),k>a&&(m=j.length-1)):j.push(null)}),this.trigger("unmask").each(function(){function h(){if(g.completed){for(var a=l;m>=a;a++)if(j[a]&&C[a]===p(a))return;g.completed.call(B)}}function p(a){return g.placeholder.charAt(a<g.placeholder.length?a:0)}function q(a){for(;++a<n&&!j[a];);return a}function r(a){for(;--a>=0&&!j[a];);return a}function s(a,b){var c,d;if(!(0>a)){for(c=a,d=q(b);n>c;c++)if(j[c]){if(!(n>d&&j[c].test(C[d])))break;C[c]=C[d],C[d]=p(d),d=q(d)}z(),B.caret(Math.max(l,a))}}function t(a){var b,c,d,e;for(b=a,c=p(a);n>b;b++)if(j[b]){if(d=q(b),e=C[b],C[b]=c,!(n>d&&j[d].test(e)))break;c=e}}function u(){var a=B.val(),b=B.caret();if(a.length<o.length){for(A(!0);b.begin>0&&!j[b.begin-1];)b.begin--;if(0===b.begin)for(;b.begin<l&&!j[b.begin];)b.begin++;B.caret(b.begin,b.begin)}else{for(A(!0);b.begin<n&&!j[b.begin];)b.begin++;B.caret(b.begin,b.begin)}h()}function v(){A(),B.val()!=E&&B.change()}function w(a){if(!B.prop("readonly")){var b,c,e,f=a.which||a.keyCode;o=B.val(),8===f||46===f||d&&127===f?(b=B.caret(),c=b.begin,e=b.end,e-c===0&&(c=46!==f?r(c):e=q(c-1),e=46===f?q(e):e),y(c,e),s(c,e-1),a.preventDefault()):13===f?v.call(this,a):27===f&&(B.val(E),B.caret(0,A()),a.preventDefault())}}function x(b){if(!B.prop("readonly")){var c,d,e,g=b.which||b.keyCode,i=B.caret();if(!(b.ctrlKey||b.altKey||b.metaKey||32>g)&&g&&13!==g){if(i.end-i.begin!==0&&(y(i.begin,i.end),s(i.begin,i.end-1)),c=q(i.begin-1),n>c&&(d=String.fromCharCode(g),j[c].test(d))){if(t(c),C[c]=d,z(),e=q(c),f){var k=function(){a.proxy(a.fn.caret,B,e)()};setTimeout(k,0)}else B.caret(e);i.begin<=m&&h()}b.preventDefault()}}}function y(a,b){var c;for(c=a;b>c&&n>c;c++)j[c]&&(C[c]=p(c))}function z(){B.val(C.join(""))}function A(a){var b,c,d,e=B.val(),f=-1;for(b=0,d=0;n>b;b++)if(j[b]){for(C[b]=p(b);d++<e.length;)if(c=e.charAt(d-1),j[b].test(c)){C[b]=c,f=b;break}if(d>e.length){y(b+1,n);break}}else C[b]===e.charAt(d)&&d++,k>b&&(f=b);return a?z():k>f+1?g.autoclear||C.join("")===D?(B.val()&&B.val(""),y(0,n)):z():(z(),B.val(B.val().substring(0,f+1))),k?b:l}var B=a(this),C=a.map(c.split(""),function(a,b){return"?"!=a?i[a]?p(b):a:void 0}),D=C.join(""),E=B.val();B.data(a.mask.dataName,function(){return a.map(C,function(a,b){return j[b]&&a!=p(b)?a:null}).join("")}),B.one("unmask",function(){B.off(".mask").removeData(a.mask.dataName)}).on("focus.mask",function(){if(!B.prop("readonly")){clearTimeout(b);var a;E=B.val(),a=A(),b=setTimeout(function(){z(),a==c.replace("?","").length?B.caret(0,a):B.caret(a)},10)}}).on("blur.mask",v).on("keydown.mask",w).on("keypress.mask",x).on("input.mask paste.mask",function(){B.prop("readonly")||setTimeout(function(){var a=A(!0);B.caret(a),h()},0)}),e&&f&&B.off("input.mask").on("input.mask",u),A()})}})});
  9.  
В конце этого же файла добавил активацию при определенном ID
  1.  
  2. <script type="text/javascript">
  3. jQuery(function($){
  4. $("#phone").mask("+7 (999) 999-9999");
  5. });
  6. </script>
  7.  
Получаем :


Сейчас все работает, но при обновлении может слететь раз, это не правильно так делать два. Есть кто то кто оформит модулем или чем то чтоб было правильно? Думаю не только мне станет интересно это…
#2 24 июля 2015 в 21:26
Так проще сделать копию этого поля с другим названием
п.с. В таком формате плохо выглядят номера стационарных телефонов. Как правило в областных центрах код города из 3х цифр, а во всех районах добавляется 2 цифры, и потом пойми кому звонишь то ли в своем городе то ли в областной центр
#3 24 июля 2015 в 22:10
маску задать в настройках поля )
#4 25 июля 2015 в 08:44


Так проще сделать копию этого поля с другим названием
п.с. В таком формате плохо выглядят номера стационарных телефонов. Как правило в областных центрах код города из 3х цифр, а во всех районах добавляется 2 цифры, и потом пойми кому звонишь то ли в своем городе то ли в областной центр

rector

Я как пример привел, так что не нужно о мелочах. Можно обдумать как это реализовать и для З-х значного кода и как в моем случае 5-и значного, За это отвечает маска. Сделайте отдельно пункт городской с маской sityphone и пользуйте маску mask("8 (99999) 999-99")
Качество вводимых символов мало изменится. а вот то, что пользователю можно ввести и +79о11_2з-88-88, +7 (9011) 23-88-88, девятьсот1 стодвадцатьтри 88-88 и много еще чего это не правильно, а Вы как считаете?
#5 25 июля 2015 в 08:46


маску задать в настройках поля )

rookee

Подскажите где это сделать? я не вижу.
Прикрепленный файл
_imoo9.png 24 Кб
#6 25 июля 2015 в 16:52

сделать? я

Sergey Necr
А что мешает поставить галочку Только целые числа?
#7 25 июля 2015 в 19:53


сделать? я

Sergey Necr
А что мешает поставить галочку Только целые числа?

rector

А где вы в номере +7 918 587-12-12 видите только целые числа или в номере 8 (812) 324-12-12 их видите?
Это только маска нужна. Как я уже сказал, мое решение работает корректно, но оно не верно исполнено.
#8 6 августа 2015 в 20:28
Интересно, разработчики есть, а готовое решение воплотить некому...
Попробую еще раз. Целое число это 123456789, +1(234)567-89-0 не является целым числом, соответственно не может быть вписано в формате "Только целые числа ", если я выставлю 12 символов (+71234567890) в строке то тоже не защищусь от неверного ввода так как +7 (123) 4567890 это 16 символов, а +7 (123) 456-78-90 уже 18. Остается тоько жестко указать пользователю, вот так нужно писать, но нет маски в поле. Остается только мое решение, но оно не верно оформлено, неужели некому правильно оформить и выложить модулем, виджетом, дополнением…
#9 13 августа 2015 в 13:03
да это поле подошло бы под объявления...
просто так никто не воплотит в жизнь...
давайте скинемся кому интересно да и всё…
#10 14 августа 2015 в 00:59

просто так никто не воплотит в жизнь...

Daniel Defo
Это точно..

давайте скинемся кому интересно да и всё...

Daniel Defo
А стоит ли?
#11 14 августа 2015 в 13:40

только я к полю хайда прикрутил

Daniel Defo
Покажите свой вариант?
Вы не можете отвечать в этой теме.
Войдите или зарегистрируйтесь, чтобы писать на форуме.
Используя этот сайт, вы соглашаетесь с тем, что мы используем файлы cookie.