2013-12-20 3 views
0

Я использую шаблоны Java-скрипта для проверки имени, но понял, что мне действительно нужно быть экспертом в шаблонах для решения этой проблемы. Функция должна возвращать значение true для имени, которое составлено из алфавитов, имя может быть сделано из одного или нескольких альфа-слов, разделенных пробелом или дефисом Например. следующие допустимые имена.Javascript для проверки поля имени

  1. Джон Фишер
  2. Джон Эндрю Фишер
  3. Мичил B Джексон
  4. Мичил-B-Джексон

Micheal Micheal-B-Jackson-Fisher

После недопустимые имена

  1. Мичил В джексон (Предположим, что существует пробел после Джексоном)
  2. Мичил (предположим, что существует пробел, прежде чем м)
  3. Micheal/(этот имеет не альфа-символов)
  4. -micheal-В-Джексон (начинается с дефисом)
  5. Мичил * ДЖЕКСОН (имеет * слова, слова могут быть разделены только - или пробел)

я написал следующую функцию, которая работала хорошо до тех пор, пока имя не из более 2 слов, разделенных пробелами или -. Однако теперь требования изменились, и имя может иметь более одного слова.

function isAlpha(field) { 
    var lbl = field.name; 
    var val = field.value; 
    if (val==null || val.length==0) return true; 

    //egs of this pattern 1)Rachit Pant 2)R Pant 
    var rep1 = /[A-Za-z]+\s[A-Za-z]+/; 
    //egs of this pattern 1)Rachit-Pant 2)R-Pant 
    var rep2 = /[A-Za-z]+[-][A-Za-z]+/; 
    //one or more alpha character 
    var rep3 = /[A-Za-z]+/; 

    var test1 = val.match(rep1); 
    var test2 = val.match(rep2); 
    var test3 = val.match(rep3); 
    if((test1!=null)){  
     if(test1.length == 1 && test1[0].length == val.length) 
      return true;   
    } 
    if((test2!=null)){  
     if(test2.length == 1 && test2[0].length == val.length) 
      return true;   
    } 

    if((test3!=null)){  
     if(test3.length == 1 && test3[0].length == val.length) 
      return true;  
    } 

    alertMe('GL006',field,field); 
    return false; 

} 
+1

Если вы делаете это для чего-нибудь, но проект класса я настоятельно рекомендую не ограничивающие имена, которые могут вводится. У людей на этой Земле есть странные странные имена. – thatidiotguy

+0

Невозможно изменить требования. :( – Rpant

ответ

1

Повторите попытку с помощью этого регулярного выражения: ^[a-zA-Z]+(?:[ -][a-zA-Z]+)*$. А насчет вашего яваскрипта кода: вам не нужно использовать match функции, test достаточно, как это:

var regExp = /^[a-zA-Z]+(?:[ -][a-zA-Z]+)*$/; 
return regExp.test(val); 
+0

Я ценю вашу удивительную логику больше, чем вашу готовность помочь. В противном случае потратил бы половину дневного обучения регулярному выражению и написанию этого. Кроме того, ваше регулярное выражение отлично работало, хотя мой вопрос не дал однозначного указания, что он должен вернуть true для «John Micheal-Jack» (имеет как пробел, так и дефис) – Rpant

Смежные вопросы