2009-04-18 5 views
5

현재 정규 표현식에 이론적으로 배경이 있지만 거의 사용하지 않았습니다.정규식을 입력 유효성 검사에 사용하는 것이 좋습니다.

일반 입력 유효성 검사를위한 클래스를 개발하려고하고 있으며 정규 표현식을 사용하지 않고 메소드를 작성하고 있습니다. 나는 최근에 this Jeff의 글을 읽었으며, 이제는 내부에 정규 표현식을 포함시키는 메소드를 리팩터링해야하는지 궁금합니다.

파서와 같은 응용 프로그램의 프론트 엔드를 구축하는 데 정규 표현식을 사용한다고 생각했지만 분명히 그 이상의 용도로 사용됩니다.

정규식으로 모든 유효성 검사를 수행 할 수 있거나 수행해야하는 것은 아니지만 입력을 검증하는 것이 좋습니다.

답변

5

정규 표현식은 텍스트와 패턴을 일치시키는 한 가지 방법 일뿐입니다. 정규식을 사용하지 않고 같은 일을하는 다른 방법이 있습니다. 당신은 정규 표현식을 당신의 코드에 포함시켜야 할 전문 용어로 생각해서는 안됩니다. 가장 잘 작동하는 도구를 사용하십시오.

입력 유효성 검사를 위해 사용하고있는 도구가 무엇인지 정확히 받아 들여서 허용 할 텍스트의 종류를 정확하게 지정하고 은 기본값으로을 모두 거부합니다. 정규식을 사용하면 특정 유형의 입력에 대해이를 쉽고 간결하게 처리 할 수 ​​있으므로 많은 사람들이이를 사용합니다.

2

나는 모든 검증이 나

당신은 정확히 바로 그 하나에있어 정규 표현식으로 수행하지만, 정확히 사회적 예를 들어 특정한 방식으로 (해야 것들을해야 할 수없는 것을 깨닫게 보안 번호, 전화 번호 (어느 정도까지) 및 전자 메일)를 사용하는 경우 정규식을 사용하면 도움이 될 수 있습니다.

하지만 그 (것)들에 의지하지 말라. 예를 들어 꽤 좋은 정규 표현식 검사 이메일을 가지고 있지만 분명히 가짜 도메인 목록 (예 : example.com 및 Google 데이터베이스 (주로 로컬 콘텐츠)에서 본 일부)이 일치해야합니다.

1

예 - 정규 표현식은 입력 유효성 검사에 매우 적합합니다. 그러나 종종 다른 것들처럼 가능한 한 많이 이러한 것들을 추상화하는 것이 매우 좋은 생각입니다. 심지어 때로는 특수 검사기 객체도 있습니다.

정규 표현식은 종종 많은 문제를 야기 할 수 있지만 전체적으로 입력 무효화는 무조건적으로 빛나는 경우입니다.

0

나는 이것을 모범 사례 라 부르지 만, 나는 확실히 전자 메일 주소 나 연산 등의 유효성 검사에 정규 표현식을 사용합니다. 모범 사례가 아니라면 분명히 일반적인 관행입니다.

4

예!

정규 표현식을 사용하면 매우 짧은 시간 내에 매우 읽기 쉬운 입력 검증을 작성할 수 있습니다.

올바른 일을하고 유지 관리가 가능하며 다른 일을 수행 할 수있는 것이 내 책에서 좋습니다.

항상 그렇듯이 은 일반용을 적용하고 정규식이 작업에 적합하지 않은 도구 인 경우 사용하지 마십시오.정규 표현식 유효성 검사를 사용

4

좋은 아이디어는보다 더 besic 정규 표현식을 적용하기로 떨어져 분기하지 않는 것이 제공됩니다

을 당신은 Michael Ash 날짜를 확인하기 위해 그의 시도에서와 같은 잠재적으로 복잡한 구조를 확인하는 자신을 발견하는 경우 당신은 구타 경로 해제하고 문제를 묻는 :

^(?:(?:(?:0?[13578]|1[02])(\/|-|\.)31)\1|(?:(?:0?[13-9]|1[0-2])(\/|-|\.)(?:29|30)\2))(?:(?:1[6-9]|[2-9]\d)?\d{2})$|^(?:0?2(\/|-|\.)29\3(?:(?:(?:1[6-9]|[2-9]\d)?(?:0[48]|[2468][048]|[13579][26])|(?:(?:16|[2468][048]|[3579][26])00))))$|^(?:(?:0?[1-9])|(?:1[0-2]))(\/|-|\.)(?:0?[1-9]|1\d|2[0-8])\4(?:(?:1[6-9]|[2-9]\d)?\d{2})$ 

귀하의 코드를 유지 보수 문제를 겪게됩니다.

1

귀하의 질문에 대한 답변은 귀하의 코드 목적에 따라 다릅니다. 예, 정규 표현식은 훌륭합니다. 이전의 모든 답변 (읽은 내용)과 함께 동의합니다.

정규 표현식을 사용하면 특정 입력 내용을 검증하는 데 편리하고 빠르며 유익한 방법이지만 올바른 코드를 작성한 것을 기억하고 올바른 위치에 정규 표현식을 적용해야합니다. 나는 당신이 게시 한 기사를 읽었으며, 주제가 올바른 방식으로 정규 표현식을 사용하는 것에 관한 것이 었습니다. 즉, 솔루션을 사용하기 만하면됩니다. 입력하기가 빨라서 작동 할 것이지만 turn은 읽기 쉽고 길고 끔찍한 코드를 만듭니다.

나는 정규 표현식이 "나쁜 습관"이라고 쓰여진 것을 그대로 사용하지 않을 것입니다. 제 생각에 그는 단지 디자인을 고려하고 구현하는 데 더 좋은 개념을 제시하거나 정규 표현식이 그 개념이라는 결론을 내릴 때가 있습니다.

0

클라이언트 측과 서버 측에서 모두 유효성을 검사해야합니다. 정규 표현식은 문자열이 유효한 형식 (예 : 전자 메일 주소, 전화 번호 등)을 갖도록하는 데 매우 유용하지만 서버는 그 문자열에만 의존해서는 안됩니다. 서버는 자체적으로 확인하고 비즈니스 정확성을 검증해야합니다 (예 : 데이터베이스의 위조 주소를 확인한 위와 같은 대답).

한 번으로 충분하지 않습니다. "유효한"정도가 다릅니다.

0

유효성을 검사하려는 입력이 정규 언어 인 경우 정규 표현식을 사용하여 유효성을 검사하는 올바른 도구입니다.

관련 문제