使用javascript更改字符串
我正在用这个正则表达式检查一个字符串:使用javascript更改字符串,javascript,regex,string,Javascript,Regex,String,我正在用这个正则表达式检查一个字符串:/^[SE]*[\s]*[0-9]{3}[\s\-]*[0-9]{2}$/。这一共允许9种不同的格式,分别是:XXXXX、XXX-XX、XXX-XX、SEXXXXX、SEXXX-XX、SEXXX-XX、SEXXXXX、SEXXX-XX和SEXXX-XX(X:s是0-9中的任意数字)。在9种有效格式之一的检查通过后,如何将格式更改为XXXXX 我已经阅读了很多关于string.replace()-方法的其他线程,但我似乎无法让它工作。以下是我目前的代码:
/^[SE]*[\s]*[0-9]{3}[\s\-]*[0-9]{2}$/
。这一共允许9种不同的格式,分别是:XXXXX、XXX-XX、XXX-XX、SEXXXXX、SEXXX-XX、SEXXX-XX、SEXXXXX、SEXXX-XX和SEXXX-XX(X:s是0-9中的任意数字)。在9种有效格式之一的检查通过后,如何将格式更改为XXXXX
我已经阅读了很多关于string.replace()
-方法的其他线程,但我似乎无法让它工作。以下是我目前的代码:
var pcValue = postalCode.value;
var format = /^[SE]*[\s]*[0-9]{3}[\s\-]*[0-9]{2}$/;
if (format.test(pcValue) === true) {
pcValue = pcValue.replace(/\[SE]*[\s]*[\s\-]*$/, /^[0-9]{5}$/);
}
它给我的是一个带有/^[0-9]{5}$/
的字符串,而不是我想要的XXXXX格式。您可以这样做:
var format = /^([SE]*)\s*(\d{3})[\s\-]*(\d\d)$/;
if (format.test(pcValue)) {
pcValue = pcValue.replace(format, "$2$3");
}
请注意,如果test
返回true,则您不必进行任何测试,只需执行替换即可。尝试以下操作:
var pcValue = postalCode.value;
var format = /^[SE]*[\s]*[0-9]{3}[\s\-]*[0-9]{2}$/;
if (format.test(pcValue) === true) {
pcValue = pcValue.replace(/\[SE]*[\s]*[\s\-]*$/, /^[0-9]{5}$/);
}
str.replace(original,replicant);
var pcValue = postalCode.value;
pcValue = pcValue.replace(/^[SE]*[\s]*([0-9]{3})[\s\-]*([0-9]{2})$/, "$1$2");
演示
您标记为已接受的答案也会验证这些类型的输入:
“ES 12345”
“SSS 123-45”
“SESE 123---45”
以下正则表达式可能更适合您的需要:
function parse(input) {
var re = /^(?:SE)?\s?(\d{3})(?:\s|-)?(\d\d)$/;
return re.test(input) && input.replace(re, '$1$2');
}
var input1=parse('SE 123 45');//12345
var input2=parse('ES 123 45');//假的
输入1 | |警报('请修复输入1!');
input2 | |警报('请修复输入| 2!');//警觉的!
关于/^(?:SE)?\s?(\d{3})(?:\s |-)?(\d\d)$/
的一些帮助:
^…$string边界
(…)捕获匹配
(?:…)不捕获匹配项
(?:SE)?“SE”,零次或一次
\s?空白,零或一次
(\d{3})3位数字(捕获->1美元)
(?:\s |-)?空白或破折号,零或一次
(\d\d)2位数字(捕获->2美元)
关于正则表达式的更多信息:。它可以工作,但如果一开始有一个SE,它在替换之后仍然存在。我该如何删除它呢?@Lemonmuncher编辑后删除了缝制的像一个符咒!甚至删除了最终的SE。