문제

그래서 등록 양식을 작성 중인데 표시 이름은 숫자, 문자, 밑줄로만 이루어져야 합니다.

내 코드를 보고 내가 뭘 잘못하고 있는지 말해 보세요.

<form method="post" action="/" onsubmit="return check_form()">
    <input type="text" id="display-name" name="display-name" maxlength="255" />
    <input type="submit" />
</form>
<script type="text/javascript">
<!--
    var name_regex = /^([a-zA-Z0-9_])+/

    function check_form()
    {
        if (!name_regex.test(document.forms[0].elements[0].value))
        {
            document.forms[0].elements[0].focus()
            alert("Your display name may only contain letters, numbers and underscores")
            return false
        }
    }
-->
</script>

분명히 문제와 관련되지 않은 내용을 포함하지 않도록 잘렸지만 이 스니펫도 작동하지 않습니다.

도움이 되었습니까?

해결책

귀하의 정규식

/^([a-zA-Z0-9_])+/

찾는다

  1. 문자열의 시작(체크), 그 뒤
  2. 문자, 숫자, 밑줄(체크) 1개 이상

그리고 그 뒤에 오는 것은 중요하지 않습니다.이 정규식은 문자, 숫자 또는 밑줄로 시작하는 한 무엇이든 일치합니다.

당신이 $ 결국에는 작동할 것입니다. $ '문자열 끝'과 일치하므로 일치할 수 있는 유일한 방법은 다음과 같은 경우입니다. 오직 문자열의 시작과 끝 사이에 숫자, 문자, 밑줄이 있어야 합니다.

/^([a-zA-Z0-9_])+$/

둘째, 다음을 사용하는 것이 좋습니다. document.getElementById('display-name').value 대신에 document.forms HTML을 다시 정렬해도 깨지지 않고 '해야 할 일에 대해 일반적으로 허용되는 표준'이기 때문입니다.

다른 팁

내 정규 표현식은 다음과 같습니다. /^[a-zA-Z0-9_]+$/

편집하다:줄 끝이 부족한 것 같아요 $ 그게 실패하게 만드는 거죠.

"작동하지 않는다"은(는) 무슨 뜻인가요?유효한 표시 이름을 거부합니까?잘못된 표시 이름을 허용합니까?어느 것?

@Annan에 따르면, $ 정규식에서 다음과 같은 잘못된 표시 이름을 허용하게 됩니다. abc123!@#.

코드가 유효한 표시 이름을 거부하는 경우 괄호가 그룹을 표시하는 대신 문자 그대로 일치하기 때문일 수 있습니다(JS의 인용 규칙이 확실하지 않습니다).

그것을 작성하는 더 간단한 방법은 다음과 같습니다.

var name_regex = /^([a-z0-9_])+$/i;

훨씬 더 간단합니다:

var name_regex = /^\w+$/;

나는 당신의 스크립트를 테스트하고 자바 스크립트에 개입했습니다.이것은 작동하는 것 같습니다 :

<form method="post" action="/" onsubmit="return check_form()">
    <input type="text" id="display-name" name="display-name" maxlength="255" />
    <input type="submit" />
</form>
<script type="text/javascript">
    <!--
    var name_regex = /^([a-zA-Z0-9_])+$/;

    function check_form()
    {
        if (!name_regex.test(document.forms[0].elements[0].value))
        {
            document.forms[0].elements[0].focus();
            alert("Your display name may only contain letters, numbers and underscores");
            return false;
        }
    }
    -->
</script>

미안 얘들아 좀 더 구체적으로 말했어야 했는데.공백을 추가할 때마다 값이 여전히 허용되었습니다.달러 기호 $ 트릭을했다!

'작동하지 않음'이란 (유효한 항목을 통과시키지 않는 것이 아니라) 유효하지 않은 항목을 통과시키는 것을 의미한다고 생각합니다.

@Annan이 말했듯이 이는 아마도 $ 현재는 값 시작 부분에 하나의 유효한 문자만 필요하고 나머지는 무엇이든 가능합니다.

라이센스 : CC-BY-SA ~와 함께 속성
제휴하지 않습니다 StackOverflow
scroll top