2011-02-24 4 views
4

나는 사람의 이름을 검증하는 정규식을 만들고 싶습니다. 이 허용되어야한다정규식 이름을 정규식으로

  • 문자 (대문자와 소문자)
  • -
  • 공간

이에 대한 정규식을 만들 꽤 간단합니다. 문제는 일부 사람들은 이름에 특수 문자를 사용한다는 것입니다. 예를 들어 gûnther 또는 François라는 사용자가 있다고 가정합니다. û 및 ç와 같은 많은 문자가 있으며 이들 모두를 나열하기는 어렵습니다.

올바른 사람 이름을 쉽게 확인할 수있는 방법이 있습니까?

+0

중국어 또는 키릴 문자는 무엇인가요? 어떤 캐릭터 세트로 작업하고 있습니까? –

+0

이름은 "O'Neill"과 같이 따옴표를 포함 할 수도 있습니다. – Capsule

+0

중국어 또는 키릴 자모가 허용되지 않습니다 ... 한도가 있어야합니다. 어느 캐릭터 셋이 사용하는 것이 가장 좋을지 모르겠다. – Bv202

답변

7

올바른 사람 이름을 쉽게 확인할 수있는 방법이 있습니까?

이것은 여러 번 논의되었다.

^.+$ 

(예, 나는 이것이 무엇 영업 이익은 아마 아니라는 것을 알고 : 나는 사람들이 동의 할 수있는 유일한 이름을 존재하기 위해, 따라서 빈 문자열이 될 수 없습니다에 있다는 것을 확신한다 . 난 그냥 이전 Q &로 요약하고 있습니다 찾고 있습니다.)

+0

+1, 정답은 IMO뿐입니다. – Wrikken

7

/^\pL[\pL '-]*\z/

+0

너무 느 렸습니다. 단지 주석 : PHP> = 5.1.0에서만 작동합니다. – Boldewyn

+0

이 정규식은 무엇을합니까? – Bv202

+1

@ Bv202의 경우, 문자열은'\ pL' (유니 코드 문자), 공백, 아포스트로피 및 하이픈 중 하나 이상으로 구성되어야합니다. 유니 코드 문자로 시작합니다. –

0

내가 정확히 모르는 트릭을 할해야 당신이 (사용자 이름 입력을 검증?)하려고 노력하고 있지만 기본적으로 I 간단하게 유지합니다. 텍스트에 숫자가 포함되어 있으면 유효성 검사에 실패합니다. 그리고 그것은 심지어 꽤 불안정합니다.

1

짧은 대답은 아니오, 쉬운 방법이 없습니다. 가장 큰 문제에 관해서 만져 보았습니다. 악센트와 여분의 것들을 교수형에 처할 정도로 매달려있는 특별한 경우가 너무 많습니다. 또한, "ABCD"그 때문에 도움이되지 않습니다 다운이

^[CAPITAL_LETERS][ALL_LETERS_AND_SYMBOLS]*$ 

같은 뭔가 휴식과 표현은 맞는 당신은 누군가가 잘못 필드에 정보를 입력하면 알 수있는 방법이 없다거나 그것이 경우 미친 할리우드 부모님이 실제로 아이들을 Sandwich 나 Umbrella와 같은 이름으로지었습니다.

+0

+1 마지막 문장 : D –

0

나는 동일한 문제가있었습니다. 우선은

preg_match("/^[a-zA-Z]{1,}([\s-]*[a-zA-Z\s\'-]*)$/", $name)) 

같은 것을 함께했다하지만 실현이 UTF-8 내 사이트에 중요 Õ A가 허용되지 않는다 예를 들어 등 스웨덴, 중국과 같은 나라의 문자가 국제적인 사이트 이후 및 사용자가 실제 이름을 입력 할 수 없도록 강요하고 싶지는 않습니다.

O'Malley와 Brooks-Schneider와 같은 이름을 허용하는 방법을 알아내는 대신에 더 쉬운 해결책 일지 모르지만 (딱 하나 만들었습니다 :) 당신이 원하지 않는 문자를 잡으려고합니다. 입력하십시오. 저에게는 기본적으로 xss JS 코드가 입력되는 것을 피하는 것이 었습니다. 그래서 나는 다음의 정규식을 사용하여 해를 끼칠 수있는 모든 문자를 걸러 낸다.

preg_match("/[[email protected]#\$%\^&\*\(\)=\+\|\[\]\{\};\\:\",\.\<\>\?\/]+/", $name) 

그런 식으로 그들은 실제로 어떤 이름의 일부가 아닌 문자를 제외하고 원하는 모든 이름을 입력 할 수 있습니다. 희망이 유용 할 수 있습니다.이 문제를 해결하지 않도록 문자열이 아무것도 할 수있다이 경우에는 이름이 필요하기 때문에

1
^.+$ 

검사 @jensgram의 대답은하지만 정규식 만, 모든 문자열을 받아들입니다. 첫 번째 문자는 대문자이고 다음 문자는 소문자로 문자 어디에

^([A-Z]{1})[a-z]+$ 

내 정규식은 문자열을 받아들입니다. 또한 다른 답변을 통해 보면, 이것은 가장 짧은 정규식과 간단한 것 같습니다.

관련 문제