2011-07-27 4 views
0

사람의 이름에 하이픈과 아포스트로피를 허용하고 모든 숫자 및 특수 문자를 허용하지 않는 정규식이 있습니다. 지금은 2 개의 이름으로 제한하고 있지만 무제한 이름을 허용하려는 경우 하이픈과 아포스트로피 만 허용합니다.공백으로 분리 된 무제한 단어 허용 시도

^\s*[a-zA-Z]+(([\'\-\+\s]\s*[a-zA-Z])?[a-zA-Z]*)\s*$ 

나는 그것을 허용해야합니다 : 데니스 데니스의 데니스-의 데니스 등 .. 지금 만이 개 단어를 허용하고 3 단어가 아닌 경기를 반환합니다.

답변

1

는 설명했다 무엇 :

^\s*    #Match 0+ whitespace 
[a-zA-Z]+   #Match 1 or more alpha characters 
(     #Capturing Group 1 
    (    #Capturing Group 2 
     [\'\-\+\s]  #Match one of these characters. 
     \s*    #Match 0+ whitespace 
     [a-zA-Z]   #Match one alpha character 
    )?    #0 or 1 of Group 2 
    [a-zA-Z]*   #0+ alpha characters 
)     #End Group 1 
\s*    #Then 0+ whitespace. 
$ 

이 당신이 할 수있는 개선 꽤 많은,하지만 난 그냥 당신이 할 수있는 작은 변화 일 것 +로 모든 일의 주위에 여분의 그룹을두고 생각 :

^(\s*[a-zA-Z]+(([\'\-\+\s]\s*[a-zA-Z])?[a-zA-Z]*)\s*)+$ 
+0

완벽한! 감사.. :) – Dennis

1

무제한 이름을 허용하려면 역수정을 거꾸로 작성하는 것처럼 보일 수 있습니다. 대신 특수 문자가 포함되어 있지 않은지 확인해야합니다.

var myname="whatever"; 
if ((/\$|\/|\^|-/, "g").exec(myname)){ 
    alert("this has special characters"; 
}else{ 
    alert "this does not"; 
} 
+0

이 아니에로이 일을 이해하지 내가 사용할 수있는 정규식 형식 :( – Dennis

+0

태그를 보지 않고도 기본적으로 자바 스크립트로 코드를 작성 ... 내 실수, 바보 같은 뇌 –

1

두 가지 옵션이 있습니다.

  1. 단순히에만 유효한 문자 할 수 있습니다. 단점은 준비가 이상 할 수 있다는 것입니다. 단점은 지나치게 엄격하지 않고 가능하지 않은 것이 유효하지 않은 것입니다.

    ^[A-Za-z'+\-\s]+$ 
    
  2. 유효한 이름 패턴의 반복 그룹을 만듭니다. 이것은 정확히을 지정하지 않았지만 사용자가하려는 것으로 보입니다. 이 패턴은 말한다

    /^\s*(?:\s?[A-Za-z]+(?:[\-'+][a-zA-Z]+)?)+\s*$/ 
    

    : 시작, 0 개 이상의 공백 후 1 또는 그룹의 더 (초 이후 단어를 선택 공간(), 하나 또는 그 이상의 다음의 예는 예에 따라,의 AZ, 및 선택적 그룹 (1 명 대시, 아포스트로피, 또는 플러스 다음 1 이상 AZ)), 0 개 이상의 공백, 끝 여기

관련 문제