JavaScript使用RegEx解析LastName

时间:2017-01-13 13:04:06

标签: javascript regex parsing names

我已经看过很多帖子 - 几乎 - 我需要的东西,而且我已经设法得到了 - 我需要的答案 - 但我可以用一些帮助来获得最后一点。我想我在何时使用.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也是如此。

2 个答案:

答案 0 :(得分:0)

您应该替换onblur函数。我已经创建了一个示例供您查看

&#13;
&#13;
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;
&#13;
&#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中的\-允许保留连字符。