我已经看过很多帖子 - 几乎 - 我需要的东西,而且我已经设法得到了 - 我需要的答案 - 但我可以用一些帮助来获得最后一点。我想我在何时使用.match以及何时使用.replace时会感到困惑。 (我可能已经在其他帖子中看到了答案,但没有如何应用它的上下文,我没有认识到它;这是连字符的要求使这个有趣。)
我有一个看起来像这样的输入文本框 -
<input type="text" id="PatientLastName"
name="PatientLastName"
onblur="FormatLastName('PatientLastName')"
value="@Model.PatientLastName"
maxlength="100" required />
onblur功能是 -
function FormatLastName(textBoxID) {
var someName = document.getElementById(textBoxID).value.toUpperCase();
someName = $.trim(someName);
var reName = /(([A-Z])+((\-?)([A-Z]*)*))/;
var matches = someName.match(reName);
var aName = matches[1];
document.getElementById(textBoxID).value = aName;
}
我需要能够从任何输入中提取名称部分 - 例如,
9898s+m+_it????h-22324j4o5n4e0=s will give me SMITH-JONES
这是所需的输出。 (所有uppper-case,唯一允许的特殊字符是字母之间只有一个连字符。像“O'Reilly”这样的名字会变成“OREILLY”。不支持非英文字符,也不支持重音。)
如果没有连字符,它也可以正常工作,例如
9898s+m+_it????h22324j4o5n4e0=s will give me SMITHJONES
但是 -
9898s+m+_it????h-22324j4o5n4e0-=s will give me SMITH-
所以我猜我的分组或量词不是很正确;也许我需要看看更多的比赛?名字的脚本工作正常,但它基于.replace - 我找不到让.replace使用连字符的方法。
使用.replace的名字版本是 -
function FormatFirstName(textBoxID) {
var someName = document.getElementById(textBoxID).value.toUpperCase();
someName = $.trim(someName);
someName = someName.replace(/[^A-Z]/g, '');
document.getElementById(textBoxID).value = someName;
}
感谢您的帮助。
- 编辑 - 我希望通过包含FirstName函数来解决问题。我把它放在显示我可以到达哪里我需要摆脱特殊字符和大写字母 - 但它不做我需要的模式匹配。替换看起来可能会留下一个尾随连字符,并且似乎不会过滤有多个连字符的情况。我需要SMITH-JONES,SMITH - JONES会出问题,SMITH也是如此。
答案 0 :(得分:0)
您应该替换onblur
函数。我已经创建了一个示例供您查看
function getValue(){
var value= arguments[0];
value = value.replace(/[^a-zA-Z\-]*/g, "");
console.log(value.toUpperCase());
}
&#13;
<input type="text" onblur="getValue(this.value)"/>
&#13;
在这种特殊情况下,请将您的功能更新为
function FormatFirstName(textBoxID) {
var someName = document.getElementById(textBoxID).value.toUpperCase();
someName = $.trim(someName);
someName = someName.replace(/[^a-zA-Z\-]*/g, '');
document.getElementById(textBoxID).value = someName.toUpperCase();
}
答案 1 :(得分:0)
您尝试过类似的事情吗?
function FormatFirstName(textBoxID) {
var someName = document.getElementById(textBoxID).value.toUpperCase();
someName = $.trim(someName);
someName = someName.replace(/[^A-Z\-]/g, '');
document.getElementById(textBoxID).value = someName;
}
RegExp中的\-
允许保留连字符。