在Javascript中匹配正则表达式

时间:2014-06-12 17:19:49

标签: javascript

我正在使用Javascript来验证我的表单字段,以下正则表达式无效。我使用错误的方法来匹配吗?

var name=document.getElementById('first_name').value;

if (!name.match(/^[A-Za-z]*$/))
{
    document.getElementById('error').innerHTML = "Please match the regxp";
    document.getElementById('first_name').focus();
    return false;
}

我正在表单提交上执行上述代码。

6 个答案:

答案 0 :(得分:0)

*重复运算符匹配或更多次出现,因此正则表达式^[A-Za-z]*$将匹配零次或多次出现的字母,即它将匹配空字符串以及只包含字母的字符串。

您可能打算使用+重复运算符来匹配1个或更多^[A-Za-z]+$

答案 1 :(得分:0)

试试这个。使用Regex可以做到这一点。

function validateName(x){
    var name=document.getElementById('first_name').value;
    var pattern = new RegExp('/^\w+$/');
    if(!pattern.test(name)){
       alert("Use only A-Z, a-z, 0-9, or _ in names.");
       return false;
    }
}

答案 2 :(得分:0)

我不确定您发布的代码中是否存在问题,是否正确绑定到事件处理程序?

它适用于jsfiddle http://jsfiddle.net/dD6y3/

刚刚添加了模糊绑定,也许这就是你缺少的东西?或者有什么问题?很难说没有看到更多的代码。

$('#first_name').on("blur", function() {

  var name = document.getElementById('first_name').value;

    if (!name.match(/^[A-Za-z]*$/)) {
        document.getElementById('error').innerHTML="Please match the regxp";
        document.getElementById('first_name').focus();
        return false;
    }
});

答案 3 :(得分:0)

您的正则表达式似乎没问题,您是否已将事件附加到输入? 您应该添加事件以检查它是否正确:http://www.w3schools.com/js/js_htmldom_events.asp

这是我的解决方案,它会在您取消选择输入时检查错误,当您更改为其他输入时:

<强> HTML

<div id='error'></div>
<input id='first_name' onchange="checkChanges()"/>

虽然这样可行,但您应该使用事件处理程序或jQuery等framerowk,以确保它可以在所有可能的浏览器上运行

<强> JS

function checkChanges() {
var name = document.getElementById('first_name').value;

if (!name.match(/^[A-Za-z]*$/))
{
    document.getElementById('error').innerHTML="Please match the regxp";
    document.getElementById('first_name').focus();
    return false;
} else {
    document.getElementById('error').innerHTML="OK";
}
}

Live Demo

答案 4 :(得分:0)

假设您希望您的名字以字母开头,而您不使用jQuery ......

var errors = document.getElementById('error');
var firstName = document.getElementById('first_name');

function validate(element) {
  var name = element.value;
  if (name.match(/^[A-Za-z]+$/)) {
      return true;
  }
  errors.innerHTML = "Name must begin with a letter";
  element.focus();
  return false;
}

validate(firstName);  // needs moving to a submit event handler or similar

答案 5 :(得分:0)

我已经解决了......

为了匹配正则表达式,我使用了以下方法......

var pattern=/^[A-Za-z0-9]+$/;
if (!pattern.test(document.getElementById('first_name').value))
{
    document.getElementById('error').innerHTML = "only the characters and 0-9 are allowed";
    document.getElementById('first_name').focus();
    return false;
}

顺便说一下,谢谢你的所有回复