J'ai vu beaucoup de messages qui sont-presque-ce dont j'ai besoin et j'ai réussi à obtenir presque la réponse dont j'ai besoin, mais je pourrais utiliser un peu d'aide pour obtenir le dernier bit . Je pense que je deviens confus entre quand utiliser .match et quand utiliser .replace. (J'ai peut-être vu la réponse dans d'autres articles, mais sans le contexte de l'application, je ne l'ai pas reconnu, c'est l'exigence du trait d'union qui l'a rendu intéressant.)JavaScript en utilisant RegEx pour analyser le nom
J'ai une zone de saisie qui ressemble à ceci -
<input type="text" id="PatientLastName"
name="PatientLastName"
onblur="FormatLastName('PatientLastName')"
value="@Model.PatientLastName"
maxlength="100" required />
La fonction onblur est -
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;
}
Je dois être en mesure de tirer juste les parties du nom de toute entrée - par exemple,
9898s+m+_it????h-22324j4o5n4e0=s will give me SMITH-JONES
qui est la sortie désirée. (tous les majuscules, le seul caractère spécial autorisé est un et un seul trait d'union entre les lettres.Un nom comme "O'Reilly" deviendrait "OREILLY ".Non support pour les caractères non-anglais, ni les accents.)
et s'il n'y a pas de traits d'union, il fonctionne bien ainsi, par exemple
9898s+m+_it????h22324j4o5n4e0=s will give me SMITHJONES
Mais pour -
9898s+m+_it????h-22324j4o5n4e0-=s will give me SMITH-
Je devine que j'ai soit le groupe ou quantificateurs pas tout à fait raison; peut-être que je dois regarder plus de matches? Le script du prénom fonctionne bien, mais il est basé sur .replace - Je n'ai pas trouvé de moyen d'obtenir .replace pour fonctionner avec le trait d'union.
La première version du nom des œuvres, en utilisant .replace, est -
function FormatFirstName(textBoxID) {
var someName = document.getElementById(textBoxID).value.toUpperCase();
someName = $.trim(someName);
someName = someName.replace(/[^A-Z]/g, '');
document.getElementById(textBoxID).value = someName;
}
Merci pour toute aide.
--edit-- J'espère que je n'ai pas confondu les choses en incluant la fonction FirstName. Je l'ai mis là pour montrer où je peux aller là où je dois être en termes de se débarrasser des caractères spéciaux et des majuscules - mais cela ne correspond pas au modèle dont j'ai besoin. Remplacer ressemble à ce qu'il pourrait me laisser avec un trait d'union et ne semble pas filtrer les cas où il y a plus d'un trait d'union. J'ai besoin de SMITH-JONES, SMITH - JONES serait un problème, tout comme SMITH-.
Jetez un coup d'œil à http: //www.kalzumeus.com/2010/06/17/falsehoods-programmers-believe-about-names/ – Toto
@Toto - oui, c'est une bonne liste de contrôle, mais j'enregistre les noms des patients et ils sont plus heureux avec les noms simplifiés. Certains de leurs systèmes sont vieux et casseraient si vous essayiez d'entrer d'autres types de noms. Ainsi, même si les développeurs savent que les noms peuvent avoir un éventail incroyable de variantes, ces utilisateurs finaux ont des besoins simples. C'est un cas de donner au client ce qu'ils demandent. –