2016-03-11 43 views
1

我似乎无法弄清楚如何让这个脚本来验证只有字母被输入。所以如果输入一个数字,那么应该返回一个错误。用Javascript来验证字母

HTML

<form name="myForm" action="demo_form.asp" 
onsubmit="return validateForm()" method="post"> 
First name: <input type="text" name="fname"> 

javascipt的

<script> 
function validateForm() { 
    var x = document.forms["myForm"]["fname"].value; 
    if (x == null || x == "") { 
     alert("First name must be filled out"); 
     return false; 
    } 
} 
</script> 
+3

正则表达式,'/ [^ A-Z]/gi'。使用https://regex101.com/来测试。 –

+0

试试这个'/[^a-zA-Z]/.test(x)!== true' – Dalorzo

+0

不要忘记你可以在输入上使用模式属性,并提供上述表达式作为模式。那你就不需要JS了。 –

回答

6

这可能与HTML5的新pattern属性来最好的完成。但是,它在Safari或Internet Explorer 9中不起作用。

从Mozilla开发者网络

的正则表达式控件的值与检验。该模式必须匹配整个值,而不仅仅是一些子集。使用title属性来描述模式以帮助用户。此属性适用于type属性的值为文本,搜索,电话,网址,电子邮件或密码的情况;否则会被忽略。正则表达式语言与JavaScript的相同。该图案未被正斜线包围。

<form action="demo_form.asp"> 
 
    Username: <input type="text" name="username" 
 
    pattern="[A-Za-z]+" title="Your username"> 
 
    <input type="submit"> 
 
</form>

对于从石器时代的浏览器,只需使用正则表达式。

if (!/^[a-z]+$/i).test(exp)) { 
    return false; 
} 

说明

^$字符信号,该字符串应该都开始和以字母

+修改结束表明,我们正在寻找一个或多个这样的信件。

最后,引发不区分大小写的标志i以指示它可以是大写或小写。

+0

你的意思是'pattern'属性吗? :) – jeoj

+0

确实,谢谢你指出 –

0

这是一个完整的工作示例。如果名称无效,它将阻止表单提交并显示警报。如果名称有效,表单将继续提交。

document.querySelector('form').addEventListener('submit', function(event) { 
 
    if (/^[a-z]+$/i.test(this.name.value)) return; 
 
    event.preventDefault(); 
 
    alert('Invalid name!'); 
 
});
<form> 
 
    <input name="name"> 
 
    <input type="submit"> 
 
</form>