正则表达式在javascript中一再失败

正则表达式在javascript中一再失败,javascript,jquery,regex,Javascript,Jquery,Regex,我的名字和姓氏都有正则表达式。即使我根据正则表达式给出正确的输入,它也会失败。我尝试更改不同的正则表达式,但仍然失败。对于测试,我甚至使用了唯一的数字regex,但仍然失败了。下面是我正在使用的代码 <form id="register_form" action="{{url('/register')}}" method="post" accept-charset="UTF-8"> <div class="col-sm-6"> <div class

我的名字和姓氏都有正则表达式。即使我根据正则表达式给出正确的输入,它也会失败。我尝试更改不同的正则表达式,但仍然失败。对于测试,我甚至使用了唯一的数字regex,但仍然失败了。下面是我正在使用的代码

<form id="register_form" action="{{url('/register')}}" method="post" accept-charset="UTF-8">
   <div class="col-sm-6">
      <div class="form-group">
            <label for="name">Name</label>
            <input type="text" id="first_name" class="form-control" placeholder="Enter Name" name="first_name">
      </div>
    </div>
</form>

<script src="https://cdnjs.cloudflare.com/ajax/libs/jquery-validate/1.17.0/jquery.validate.js"></script>
<script src="https://cdnjs.cloudflare.com/ajax/libs/jquery-validate/1.17.0/additional-methods.js"></script>

<script type="text/javascript">
    $.validator.addMethod(
        "regex",
        function(value, element, regexp) {
            var re = new RegExp(regexp);
            return this.optional(element) || re.test(value);
        },
        "Number Not valid."
    );

    $("#register_form").validate({
        rules: {
            first_name: {required:true, minlength:2, regex:"^[a-zA-Z]+((\\s|\\-)[a-zA-Z]+)?$"},
        },
        messages:   {
            first_name:{required:'First name is required',minlength:'First name should contain atleast two alphabets',regex:'Only alphabets allowed and it should not start with space.'},
        }
    );
</script>

名称
$.validator.addMethod(
“正则表达式”,
函数(值、元素、regexp){
var re=新的RegExp(RegExp);
返回此.optional(element)| | re.test(value);
},
“号码无效。”
);
$(“#登记表”)。验证({
规则:{
名字:{required:true,minlength:2,regex:“^[a-zA-Z]+(\\s| \-)[a-zA-Z]+)?$”,
},
信息:{
first_name:{required:'first name is required',minlength:'first name应至少包含两个字母表',regex:'仅允许字母表,且不应以空格开头。',
}
);

我的输入失败的是Raj Shah,这应该工作得很好。我检查了重复的输入id,但没有。我在在线测试仪上检查了正则表达式,它工作得很好。

虽然您的正则表达式模式似乎工作得很好,但问题可能在于正则表达式模式是如何通过的,它可能经历了一个转义过程,您的bac通过在其前面添加另一个反斜杠再次转义kslash字符

如果可以看到至少3个反斜杠而不是2个反斜杠,则可以尝试将
regex
字符串记录到控制台

您还应该尝试使用
单引号
而不是
双引号
,这样反斜杠字符就不会插入字符串中

'^[a-zA-Z]+((\\s|\\-)[a-zA-Z]+)?$'
而不是

"^[a-zA-Z]+((\\s|\\-)[a-zA-Z]+)?$"
您也可以尝试在正则表达式中添加第三个反斜杠:

"^[a-zA-Z]+((\\\s|\\\-)[a-zA-Z]+)?$"

虽然您的正则表达式没有错误并且输入应该通过,但您似乎在验证程序逻辑方面有问题。我不确定这是否会有帮助,但我建议将
regex
参数和
regexp
参数命名为相同的名称,以防出现问题,然后在va之外编译
regexp
眼睑遮盖法

$.validator.addMethod(
  "regex",
  function(value, element, regex) {
    return this.optional(element) || regex.test(value);
  },
    "Number Not valid."
  );
$("#register_form").validate({
  rules:
    {
      first_name: {
        required:true,
        minlength:2,
        regex:/^\p{L}+((\s|-)\p{L}+)?$/u},
      },
      messages: {
        first_name:{
          required:'First name is required',
          minlength:'First name should contain at least two letters',
          regex:'Only letters allowed and it should not start with space.'},
});

在可以避免的情况下,尽量不要使用
new RegExp
,而是使用正则表达式文本,这样就不必双重转义“\`。您拥有的第一个正则表达式字符串将与
“first”
“first Last”和
“first Last”匹配
-可能您使用的是
validator.addMethod
无法正确复制。
re.test('Raj Shah');
->
true
不是正则表达式。我猜
regexp
参数可能没有正确传递-一个最小的、完整的、可验证的示例将有助于
regex:^[a-zA-Z]+((\\s\\\\\\\\\\)[a-zA-Z]+)?”
…regex:键的意思是什么?请尝试显示更有意义的代码以获得更有意义的帮助