- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
如果您从下拉列表中选择一个国家/地区,您将看到该国家/地区的数字模式已在占位符示例中进行了格式化。问题是我当前的代码将数字显示为 9
的字符串,并且每个模式都有大括号。
当您从 var pattern
中删除 RegExp
时,将显示所需的占位符:
来自:
pattern = telInput.attr("placeholder")
.replace(new RegExp("[0-9]", "g"), "9")
.replace(/([9]\d{0,10})/g, '{{$1}}');
收件人:
pattern = telInput.attr("placeholder");
占位符然后显示一个没有大括号的 DEMO 数字字符串,这是所需的行为。现在唯一的问题是当我去输入一个值时,plaholder 值作为输入输入。
如何更改代码以便占位符显示数字的演示字符串(当 pattern = telInput.attr("placeholder");
时)以及当我键入时输入占位符值被重置并且我输入的输入仍然遵循那个国家数字模式?
var intlPhoneNumber = function intlPhoneNumber(countryCode) {
// get the country data from the plugin
var countryData = $.fn.intlTelInput.getCountryData();
var telInput = $("#phone-number");
var telInputLabel = telInput.parents(".form-group").find("label");
var countryDropdown = $("#phone-number-country");
var phonePrefix = $('.phone-number-prefix');
var fullPhoneNumber = $('#phone-number-full');
var errorMsg = $("#error-msg");
var initCountry = countryCode || 'us';
var pattern = '';
//set initial pattern for formatting
if (initCountry === 'us') {
pattern = '({{999}}) {{999}}-{{9999}}';
} else {
// using as temp until formatting on init figured out
pattern = '{{9999999999999999999999}}';
}
// reset function to reset error state on validation
var reset = function reset() {
telInput.attr("placeholder", pattern);
telInput.removeClass("has-error");
telInputLabel.removeClass("has-error");
errorMsg.addClass("hidden-xs-up");
};
// populate the country dropdown with intl-tel-input countries data
$.each(countryData, function(i, country) {
countryDropdown.append($("<option></option>").attr("value", country.iso2).text(country.name));
});
// init plugin for formatting placeholders
telInput.intlTelInput({
allowDropdown: false,
initialCountry: initCountry,
utilsScript: "https://1cf5229636340d3e1dd5-0eccc4d82b7628eccb93a74a572fd3ee.ssl.cf1.rackcdn.com/testing/utils.js"
});
// set dropdowns initial value
var initialCountry = telInput.intlTelInput("getSelectedCountryData").iso2;
var dialCode = telInput.intlTelInput("getSelectedCountryData").dialCode;
countryDropdown.val(initialCountry);
phonePrefix.text("+" + dialCode);
// init format
telInput.formatter({
'pattern': pattern
});
// delete intl-tel-input items that aren't needed
$('.flag-container').remove();
$('.intl-tel-input').replaceWith(function() {
return $('#phone-number', this);
});
// set placeholder
telInput.attr("placeholder", pattern);
// on blur: validate
telInput.blur(function() {
// reset states
reset();
if ($.trim(telInput.val())) {
// if number is not valid
if (telInput.intlTelInput("isValidNumber")) {
// set hidden input to dial code + inputted number
fullPhoneNumber.val(telInput.intlTelInput("getSelectedCountryData").dialCode + telInput.val());
} else {
// set error states
telInput.addClass("has-error");
telInputLabel.addClass("has-error");
errorMsg.removeClass("hidden-xs-up");
//clear hidden input val
fullPhoneNumber.val("");
}
}
});
// on keyup / change flag: reset
telInput.on("keyup change", reset);
// listen to the country dropdown for changes.
// updates placeholder and prefix when changed
countryDropdown.change(function() {
// Update Placeholder via plugin - so we can get the example number + format
telInput.intlTelInput("setCountry", $(this).val());
// Update Dial Code Prefix
dialCode = telInput.intlTelInput("getSelectedCountryData").dialCode;
phonePrefix.text("+" + dialCode);
// Use updated placeholder to define formatting pattern
pattern = telInput.attr("placeholder").replace(new RegExp("[0-9]", "g"), "9").replace(/([9]\d{0,10})/g, '{{$1}}');
// update formatter
telInput.formatter().resetPattern(pattern);
// clear telephone input to prevent validation errors
telInput.val("");
// update placeholder to specific
telInput.attr("placeholder", pattern);
});
};
// Testing for prepopulation. If country code not supplied: default = 'us'
// const initCountryCode = 'ca'; // uncomment to pass in as param
intlPhoneNumber();
<script src="https://cdnjs.cloudflare.com/ajax/libs/jquery/3.3.1/jquery.min.js"></script>
<script src="https://cdn.staticaly.com/gh/jaridmargolin/formatter.js/master/dist/jquery.formatter.min.js"></script>
<script src="https://1cf5229636340d3e1dd5-0eccc4d82b7628eccb93a74a572fd3ee.ssl.cf1.rackcdn.com/testing/intlTelInput.min.js"></script>
<script src="https://cdn.staticaly.com/gh/jaridmargolin/formatter.js/master/dist/jquery.formatter.min.js"></script>
<div class="form-group">
<select class="form-control" id="phone-number-country" name="phone-number-country" autocomplete="off"></select>
</div>
<div class="form-group">
<div class="phone-number">
<div class="form-control phone-number-prefix"></div>
<input class="form-control" id="phone-number" name="phone-number" type="tel" autocomplete="off">
<input type="hidden" id="phone-number-full" name="phone-number-full" />
</div>
最佳答案
在将格式器添加/更新到占位符之前删除格式器花括号。我们也可以为此使用正则表达式替换:
pattern.replace(/{{(\d+)}}/gm, `$1`)
var intlPhoneNumber = function intlPhoneNumber(countryCode) {
// get the country data from the plugin
var countryData = $.fn.intlTelInput.getCountryData();
var telInput = $("#phone-number");
var telInputLabel = telInput.parents(".form-group").find("label");
var countryDropdown = $("#phone-number-country");
var phonePrefix = $('.phone-number-prefix');
var fullPhoneNumber = $('#phone-number-full');
var errorMsg = $("#error-msg");
var initCountry = countryCode || 'us';
var pattern = '';
//set initial pattern for formatting
if (initCountry === 'us') {
pattern = '({{999}}) {{999}}-{{9999}}';
} else {
// using as temp until formatting on init figured out
pattern = '{{9999999999999999999999}}';
}
// reset function to reset error state on validation
var reset = function reset() {
telInput.attr("placeholder", pattern.replace(/{{(\d+)}}/gm, `$1`));
telInput.removeClass("has-error");
telInputLabel.removeClass("has-error");
errorMsg.addClass("hidden-xs-up");
};
// populate the country dropdown with intl-tel-input countries data
$.each(countryData, function(i, country) {
countryDropdown.append($("<option></option>").attr("value", country.iso2).text(country.name));
});
// init plugin for formatting placeholders
telInput.intlTelInput({
allowDropdown: false,
initialCountry: initCountry,
utilsScript: "https://1cf5229636340d3e1dd5-0eccc4d82b7628eccb93a74a572fd3ee.ssl.cf1.rackcdn.com/testing/utils.js"
});
// set dropdowns initial value
var initialCountry = telInput.intlTelInput("getSelectedCountryData").iso2;
var dialCode = telInput.intlTelInput("getSelectedCountryData").dialCode;
countryDropdown.val(initialCountry);
phonePrefix.text("+" + dialCode);
// init format
telInput.formatter({
'pattern': pattern
});
// delete intl-tel-input items that aren't needed
$('.flag-container').remove();
$('.intl-tel-input').replaceWith(function() {
return $('#phone-number', this);
});
// set placeholder
telInput.attr("placeholder", pattern.replace(/{{(\d+)}}/gm, `$1`));
// on blur: validate
telInput.blur(function() {
// reset states
reset();
if ($.trim(telInput.val())) {
// if number is not valid
if (telInput.intlTelInput("isValidNumber")) {
// set hidden input to dial code + inputted number
fullPhoneNumber.val(telInput.intlTelInput("getSelectedCountryData").dialCode + telInput.val());
} else {
// set error states
telInput.addClass("has-error");
telInputLabel.addClass("has-error");
errorMsg.removeClass("hidden-xs-up");
//clear hidden input val
fullPhoneNumber.val("");
}
}
});
// on keyup / change flag: reset
telInput.on("keyup change", reset);
// listen to the country dropdown for changes.
// updates placeholder and prefix when changed
countryDropdown.change(function() {
// Update Placeholder via plugin - so we can get the example number + format
telInput.intlTelInput("setCountry", $(this).val());
// Update Dial Code Prefix
dialCode = telInput.intlTelInput("getSelectedCountryData").dialCode;
phonePrefix.text("+" + dialCode);
// Use updated placeholder to define formatting pattern
pattern = telInput.attr("placeholder").replace(new RegExp("[0-9]", "g"), "9").replace(/([9]\d{0,10})/g, '{{$1}}');
// update formatter
telInput.formatter().resetPattern(pattern);
// clear telephone input to prevent validation errors
telInput.val("");
// update placeholder to specific
//telInput.attr("placeholder", pattern.replace(/{{(\d+)}}/gm, `$1`));
});
};
// Testing for prepopulation. If country code not supplied: default = 'us'
// const initCountryCode = 'ca'; // uncomment to pass in as param
intlPhoneNumber();
<script src="https://cdnjs.cloudflare.com/ajax/libs/jquery/3.3.1/jquery.min.js"></script>
<script src="https://cdn.staticaly.com/gh/jaridmargolin/formatter.js/master/dist/jquery.formatter.min.js"></script>
<script src="https://1cf5229636340d3e1dd5-0eccc4d82b7628eccb93a74a572fd3ee.ssl.cf1.rackcdn.com/testing/intlTelInput.min.js"></script>
<script src="https://cdn.staticaly.com/gh/jaridmargolin/formatter.js/master/dist/jquery.formatter.min.js"></script>
<div class="form-group">
<select class="form-control" id="phone-number-country" name="phone-number-country" autocomplete="off"></select>
</div>
<div class="form-group">
<div class="phone-number">
<div class="form-control phone-number-prefix"></div>
<input class="form-control" id="phone-number" name="phone-number" type="tel" autocomplete="off">
<input type="hidden" id="phone-number-full" name="phone-number-full" />
</div>
关于javascript - 国际电话输入 - RegExp 占位符问题,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/54677910/
我的 DateTime 对象使用 DateTime.Now 分配了本地时间。我想知道一旦夏令时开始/结束,这个对象是否会给出正确的当前本地时间。或者我需要解决方法吗? 最佳答案 是的,DateTime
假设我需要“特定类别中可用的项目数量”与“所有项目的数量”的比率。请考虑这样的 MySQL 表: /* mysql> select * from Item; +----+------------+--
我有这张 table http://codepen.io/MetCastle/pen/lxceL我想使用 jQuery 根据 input type="number" 隐藏/显示列。表示整个列: Pro
想要制作一个看起来像这样的网格,其中 div/section 以百分比表示。 margin 在任何地方都是一样的。 http://www.ladda-upp.se/bilder/giefekcmgwm
这将返回 1(又名 TRUE) SELECT DATE_SUB(NOW(), INTERVAL 24*100 HOUR) = DATE_SUB(NOW(), INTERVAL 100 DAY); 10
我一直在尝试在 UIScrollView 中获取 UIView 的转换后的 CGRect。如果我不放大它就可以正常工作,但是一旦我放大,新的 CGRect 就会发生变化。这是让我接近的代码: CGFl
对于家庭作业,我需要在不使用内置模 (%) 运算符的情况下返回 num1 除以 num2 后的余数。我能够通过以下代码让大多数测试通过,但我仍然坚持如何解释给定数字的 -/+ 符号。我需要保留 num
我用 Javascript 创建了一个倒数计时器;它是成功的,期望未完成。事实上,从数学上讲,它是正确的,但是谷歌浏览器的浏览器设置“暂停”(因为没有更好的术语)SetInterval/Timeout
我有两个 的,每个都设置为其容器宽度的 45%。有没有办法使 居中?使得它们在容器的左右两侧有相同的空间,并且它们之间也有空间。 一开始我只是做了每个 50% 并且有 padding: 0px 2
我是一名优秀的程序员,十分优秀!