有关正则表达式中单引号和双引号的问题?

时间:2013-03-04 09:08:20

标签: javascript asp.net html regex validation

我有这个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>

我做的测试:

  • 如果我在single附近添加double quotes"regex",则正则表达式不起作用。
  • 如果我在forward slashes周围添加/regex/,那么正则表达式可以正常工作但不完全,例如它不允许100name,但它允许name100
  • 如果我添加双引号和正斜杠"/regex/"'/regex/',则正则表达式不起作用。
  • 如果我添加name = name.replace(filter, '');,则脚本无效。

我的问题:

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

2 - 如何正确包含double quotes


- 更新

我使用asp.netRegularExpressionValidator中测试了我的相同正则表达式并且它工作正常,因为我可以用双引号来包装它我认为:

<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我无法用双引号包装正则表达式。所以必须有一些方法来解决它。

3 个答案:

答案 0 :(得分:2)

我认为你需要的是

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

演示:Fiddle

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

答案 1 :(得分:0)

你可以试试这个

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

答案 2 :(得分:0)

你可以尝试使用十六进制的过滤器,或使用反斜杠\

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

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

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

这应该有用。