문자, 숫자 및-_에 대한 정규식


100

값이 다음 조합 중 하나 인 경우 PHP에서 확인하는 데 문제가 있습니다.

  • 문자 (대문자 또는 소문자)
  • 숫자 (0-9)
  • 밑줄 (_)
  • 대시 (-)
  • 포인트 (.)
  • 공백이 없습니다! 또는 다른 문자

몇 가지 예 :

  • 확인 : "screen123.css"
  • 확인 : "screen-new-file.css"
  • 확인 : "screen_new.js"
  • 비정상 : "screen new file.css"

주어진 문자열에 위에서 언급 한 문자가 아닌 다른 문자가있을 때 오류가 발생해야하기 때문에 정규식이 필요하다고 생각합니다.


^ [\ w .-] * $-> 모든 파일 이름을 가져옵니다.
Badri Gs

답변:


207

원하는 패턴은 다음과 같습니다 ( rubular.com에서 확인 ).

^[a-zA-Z0-9_.-]*$

설명:

  • ^ 라인 앵커의 시작입니다.
  • $ 라인 앵커의 끝입니다.
  • [...] 문자 클래스 정의입니다.
  • * "0 개 이상의"반복

리터럴 대시 -는 문자 클래스 정의의 마지막 문자입니다. 그렇지 않으면 다른 의미 (예 : 범위)를 갖습니다. 는 .또한 문자 클래스 정의 외부에서 다른 의미를 갖지만 내부에서는 리터럴 일뿐입니다..

참고 문헌


PHP에서

다음은이 패턴을 사용하는 방법을 보여주는 스 니펫입니다.

<?php

$arr = array(
  'screen123.css',
  'screen-new-file.css',
  'screen_new.js',
  'screen new file.css'
);

foreach ($arr as $s) {
  if (preg_match('/^[\w.-]*$/', $s)) {
    print "$s is a match\n";
  } else {
    print "$s is NO match!!!\n";
  };
}

?>

위의 인쇄물 ( ideone.com에서 볼 수 있음 ) :

screen123.css is a match
screen-new-file.css is a match
screen_new.js is a match
screen new file.css is NO match!!!

\w대신 사용하면 패턴이 약간 다릅니다 . "단어 문자"의 문자 클래스입니다.

API 참조


사양에 대한 참고 사항

이것은 귀하의 사양을 따르는 것 같지만 ....., 등과 같은 것과 일치 할 수도 있고 원하는 것이 아닐 수도 있습니다. 일치시킬 패턴을 더 구체적으로 지정할 수 있다면 정규식이 약간 더 복잡해집니다.

위의 정규식은 빈 문자열과도 일치합니다. 하나 이상의 문자가 필요한 경우 반복을 위해 (0 +개 이상) 대신 *(1 개 이상)을 사용합니다.

어쨌든 사양을 더 명확히 할 수 있지만 (정규식 질문을 할 때 항상 도움이 됨) 위의 정보가 주어지면 패턴을 직접 작성하는 방법을 배울 수도 있습니다.


원하는 것보다 더 많은 다른 사양에 대해서는 ideone.com/5DMCa 를 참조하십시오 . 나와 함께 사양을 개발하려면 루 블러에서 나와 함께왔다 갔다합니다.
polygenelubricants 2010-06-12

저는 Tornado를 사용하고 있으며 html 이름을 캡처해야하므로 귀하의 답변에 따라 이것을 사용했습니다. ^/([a-zA-Z0-9._-]*\.html)$
NuclearPeon 2015

또 다른 규칙을 추가하겠습니다. 마지막 문자 는 영숫자 여야합니다. Regex 업데이트 :/[a-zA-Z0-9]+(\.[a-zA-Z0-9]+){2,}[a-zA-Z0-9^]$/
Consta Gorgan

Go (golang) 사용자,주의 사항, 여기 패턴 false은 빈 원시 문자열 리터럴을 초래 합니다. 놀이터 . 아래 @nonopolarity의 솔루션을 사용하십시오 .
BentCoder

15

당신이 사용할 수있는

^[\w\d_.-]+$

+이 적어도 1 문자가 있는지 확인하는 것입니다. 시작과 끝을 나타 내기 위해 ^and $가 필요합니다 . 그렇지 않으면 문자열의 중간 @@@@xyz%%%%에 일치하는 항목이 있으면 여전히 일치합니다.


3
-범위를 정의하지 않으 려면 첫 번째를 세트에 넣으십시오 . 그리고 \w영숫자와 밑줄을 다룹니다. 그래서 당신은 [\w.-]+.
Richard

감사합니다. 이것은 저에게 잘 작동합니다. ^ [\ w \ d _.-] + \. (csv | CSV) $
Dharam Mali

이것은 또한 Go의 (golang) 빈 원시 문자열 리터럴을 준수하지만 수락 된 답변은 Go 사용자 가이 솔루션을 고수하지 않습니다. Playground
BentCoder

8

패턴, 즉 규칙에 따라 유효한 파일 이름을 실제로 덮으려면 조금 더 필요하다고 생각합니다. 이것은 시스템 관점 에서 유효한 파일 이름과 일치하지 않습니다 . 그것은 시스템에 의존하고 그것이 받아들이는 것에 더 자유 롭습니다. 이는 귀하의 허용 가능한 패턴과 일치시키기위한 것입니다.

^([a-zA-Z0-9]+[_-])*[a-zA-Z0-9]+\.[a-zA-Z0-9]+$

설명:

  • ^문자열의 시작과 일치합니다. 이것은 (끝 일치와 함께) 문자열이 단순히 표현식과 일치하는 부분 문자열을 포함하는 것이 아니라 정확한 표현식을 따르도록합니다.
  • ([a-zA-Z0-9]+[_-])*밑줄 또는 대시가 뒤 따르는 하나 이상의 문자 또는 숫자가 0 개 이상 발생합니다. 이렇게하면 대시 나 밑줄이 포함 된 모든 이름 사이에 문자 나 숫자가 포함됩니다.
  • [a-zA-Z0-9]+하나 이상의 문자 또는 숫자. 여기에는 밑줄이나 대시가 포함되지 않은 모든 이름이 포함됩니다.
  • \.리터럴 마침표 (점). 파일 이름에 확장자를 지정하고 나머지 패턴에서 제외하여 이름과 확장자 사이에 마침표 만 사용할 수 있도록합니다. 대시 / 밑줄과 동일한 기술을 사용하여 처리 할 수있는 둘 이상의 확장을 원할 경우 끝 부분에 있습니다.
  • [a-zA-Z0-9]+하나 이상의 문자 또는 숫자. 확장자는 최소 1 자 이상이어야하며 문자와 숫자 만 포함해야합니다. 이것은 일반적이지만 밑줄을 허용하려는 경우에도 해결할 수 있습니다. 더 적절한 경우 {2,3}하나 이상의 +일치 자 대신 길이 범위 를 제공 할 수도 있습니다 .
  • $문자열의 끝을 일치시킵니다. 시작 문자를 참조하십시오.

6

이것은 당신이 찾고있는 패턴입니다

/^[\w-_.]*$/

이게 무슨 뜻이야:

  • ^ 문자열 시작
  • [...] 내부 문자 일치
  • \w 그래서 모든 단어 문자 0-9 a-z A-Z
  • -_.일치 -_.
  • * 0 개 이상의 패턴 또는 무제한
  • $ 문자열 끝

문자 수를 제한하려면 :

/^[\w-_.]{0,5}$/

{0,5}0-5문자 의미


var a = / ^ \ w * $ / g a.test ( "46545") 결과는 false입니다
Dipak

1
공지 사항 \w포함_
hxpax

4

이런 식으로 작동합니다.

$code = "screen new file.css";
if (!preg_match("/^[-_a-zA-Z0-9.]+$/", $code))
{
    echo "not valid";
}

"유효하지 않음"을 표시합니다.


2

[A-Za-z0-9_.-]*

마지막 *으로 교환하지 않으려면 빈 문자열과도 일치 합니다.+

당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.