문제
그래서 등록 양식을 작성 중인데 표시 이름은 숫자, 문자, 밑줄로만 이루어져야 합니다.
내 코드를 보고 내가 뭘 잘못하고 있는지 말해 보세요.
<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개 이상
그리고 그 뒤에 오는 것은 중요하지 않습니다.이 정규식은 문자, 숫자 또는 밑줄로 시작하는 한 무엇이든 일치합니다.
당신이 $
결국에는 작동할 것입니다. $
'문자열 끝'과 일치하므로 일치할 수 있는 유일한 방법은 다음과 같은 경우입니다. 오직 문자열의 시작과 끝 사이에 숫자, 문자, 밑줄이 있어야 합니다.
/^([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이 말했듯이 이는 아마도 $
현재는 값 시작 부분에 하나의 유효한 문자만 필요하고 나머지는 무엇이든 가능합니다.