Я видел много сообщений, которые являются самыми-то, что мне нужно, и мне удалось получить -большой ответ, который мне нужен, но я мог бы немного помочь получить финальный бит , Я думаю, что меня путают между тем, когда использовать .match и когда использовать .replace. (Возможно, я видел ответ в других сообщениях, но без контекста того, как его применять, я не узнал его, это требование для дефиса сделало это интересным.)JavaScript Использование RegEx для Parse LastName
У меня есть текстовое поле ввода который выглядит следующим образом -
<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 для работы с дефисом.
Первое название версия работы, используя .Привернуть, это -
function FormatFirstName(textBoxID) {
var someName = document.getElementById(textBoxID).value.toUpperCase();
someName = $.trim(someName);
someName = someName.replace(/[^A-Z]/g, '');
document.getElementById(textBoxID).value = someName;
}
Спасибо за любую помощь.
-edit-- Надеюсь, я не смутил вещи, включив функцию FirstName. Я помещал это, чтобы показать, где я могу добраться туда, где мне нужно быть в плане избавления от специальных символов и верхних букв - но это не соответствует подходящему шаблону. Заменить выглядит так, как будто это может оставить меня с завершающим дефисом и, похоже, не фильтрует случаи, когда имеется более одного дефиса. Мне нужен СМИТ-ДЖОНС, СМИТ - ДЖОНС будет проблемой, как и СМИТ.
Посмотрите на http: //www.kalzumeus.com/2010/06/17/falsehoods-programmers-believe-about-names/ – Toto
@Toto - да, это хороший контрольный список, но я записываю имена пациентов, и они более счастливы с упрощенными именами. Некоторые из их систем старые и будут ломаться, если вы попытаетесь ввести другие типы имен. Поэтому, хотя разработчики знают, что имена могут иметь удивительный набор вариаций, эти конечные пользователи имеют простые потребности. Это случай предоставления клиенту того, что они просят. –