我正在使用Angular JS,我正在对英国邮政编码进行验证。问题是有一个特定的要求,即英国邮政编码中应该有一个空格,只能通过计算最后一个字符来识别。因为在第三个最后一个字符之前应该有一个空格它应该是这样的:
A12 3AD
A123 3AD
A2 2AD
为此,我有两个主要问题:
如何操纵输入值以诱导空间。
如何实际更改字符串以添加空间
我是javascript/angular
的新手可以有人告诉我该怎么做吗?
PS:我没有在项目中使用jQuery。
答案 0 :(得分:7)
使用String#replace
方法并将前3个字符替换为前导空格或使用positive look-ahead assertion断言位置,并替换为空格。
string = string.replace(/.{3}$/,' $&');
// or using positive look ahead assertion
string = string.replace(/(?=.{3}$)/,' ');
console.log(
'A123A123'.replace(/.{3}$/, ' $&'), '\n',
'A13A123'.replace(/.{3}$/, ' $&'), '\n',
'A1A123'.replace(/.{3}$/, ' $&'), '\n',
'AA123'.replace(/.{3}$/, ' $&'), '\n',
'A123'.replace(/.{3}$/, ' $&'), '\n',
'A123'.replace(/(?=.{3}$)/, ' ')
)

或者您可以将String#split
和Array#join
方法与positive look-ahead assertion正则表达式一起使用。
string = string.split(/(?=.{3}$)/).join(' ');
console.log(
'A123A123'.split(/(?=.{3}$)/).join(' ')
)

答案 1 :(得分:2)
您可以使用正则表达式功能执行操作。
string = string.replace(/.{3}$/,' $&');
它指定:从最后开始,空格将被赋予第3个最后一个值
之前答案 2 :(得分:1)
而不是更改输入文本,而不提供所需输入的通知;通过title
placeholder
使用required
,:invalid
,css
属性和pattern
伪类,向用户提供对该字段的要求通知{{1} }属性设置为RegExp
^[A-Za-z0-9]{2,4}\s[A-Za-z0-9]{3}$
。
input[type="text"] {
width: 200px;
}
input:invalid {
color:red;
font-weight: bold;
}
<input type="text"
title="Input three alphanumeric characters, a space, followed by three alphanumeric characters. All other input is invalid."
placeholder="Input valid UK postal code."
pattern="^[A-Za-z0-9]{2,4}\s[A-Za-z0-9]{3}$"
required/>
答案 3 :(得分:1)
希望这会有用
使用splice
方法将字符串分成两部分。 string.length-3
将给出最后三个字符,其中string.slice(0, string.length-3)
将从字符串的开头返回第一个n-3
字符。使用array.join
方法加入各个部分
function insertSpace(string){
var output = [string.slice(0, string.length-3),' ', string.slice(string.length-3)].join('');
return output
}
console.log(insertSpace('A1233AD'))
答案 4 :(得分:-1)
您还可以使用子字符串函数:
str.substring(0,str.length - 3)+“”+ str.substring(str.length,str.length - 3)