0

我有这个 javascript 示例,其中包含一个允许单引号的正则表达式,但是由于单引号,存在问题:

<script language="javascript">
    function checkname() {
        var name = document.getElementById('Name');
        var filter = ^[a-zA-Z'.\s]{1,50};
        if (!filter.test(name.value)) {
            alert('name is not valid');
            name.focus;
            return false;
        }
        return true;
    }
</script>

我做的测试:

  • 如果我添加singledouble quotes围绕"regex"正则表达式不起作用。
  • 如果我在forward slashes周围添加,/regex/那么正则表达式可以工作但不完全,例如它不允许100name但它允许name100
  • 如果我同时添加双引号和正斜杠"/regex/",或者'/regex/'正则表达式不起作用。
  • 如果我添加name = name.replace(filter, '');然后脚本不起作用。

我的问题:

1 - 如何single quote在正则表达式中正确包含 a ?

2 - 如何正确包含double quotes


- 更新

asp.net我在using中测试了相同的正则表达式,RegularExpressionValidator它工作正常,因为我可以用双引号将它括起来,我认为:

<asp:RegularExpressionValidator ID="RegularExpressionValidator1" runat="server" ControlToValidate="TextBox1" Text="name is not valid" validationgroup="validationgroup1" ValidationExpression="^[a-zA-Z'.\s]{1,50}"></asp:RegularExpressionValidator>

但在JavaScript我不能用双引号将正则表达式括起来。所以必须有一些方法来解决它。

4

3 回答 3

2

我想你需要的是

var filter = /^[\w'".\s]{1,50}$/

演示:小提琴

您可以使用\w来表示单词字符,例如a-zA-Z0-9^标记行的开始和$结束。

于 2013-03-04T09:13:48.460 回答
0

你可以试试这个

var filter = /[a-zA-Z\"']{1,50}/;
于 2013-03-04T09:13:57.747 回答
0

您可以使用十六进制尝试如下过滤器或使用反斜杠 \ 转义

var filter = /[a-zA-Z\x22\x27]{1,50}/;

或者

var filter = /[a-zA-Z\"\']{1,50}/;

在十六进制中,"is\x22'is\x27

这应该有效。

于 2013-04-18T14:14:15.303 回答