如何使用正则表达式匹配整个字符串而不是单个字符?

3
我正在尝试使用JavaScript正则表达式/[\u0600-\u06FF]/来实现阿拉伯字母输入的“alpha”验证,如此帖子中所述。我只想接受阿拉伯字母和空格。
现在的问题是它会给出以下结果:
r = /[\u0600-\u06FF]/

r.test("abcd")      // false - correct
r.test("@#$%^")     // false - correct
r.test("س")         // true  - correct
r.test("abcd$$#5س") // true  - should be false
r.test("abcdس")     // true  - should be false

如果只给定了一个匹配字符,则它将整个输入视为可接受的,即使输入的其余部分充满不可接受的字符。我应该使用什么正则表达式代替?

2个回答

5
你需要在正则表达式中添加^$锚点,以及一个+来允许多个字符。
尝试这样做:
/^[\u0600-\u06FF]+$/

我不确定你提到的“阿拉伯空格”是否包含在该字符范围内,但如果你想要在字符串中允许空格,只需在方括号中添加\s即可。

1
您可以明确允许某些键,例如数字键盘、退格和空格,请查看下面的代码片段:
function restrictInputOtherThanArabic($field)
{
  // Arabic characters fall in the Unicode range 0600 - 06FF
  var arabicCharUnicodeRange = /[\u0600-\u06FF]/;

  $field.bind("keypress", function(event)
  {
    var key = event.which;

    // 0 = numpad
    // 8 = backspace
    // 32 = space
    if (key==8 || key==0 || key === 32)
    {
      return true;
    }

    var str = String.fromCharCode(key);
    if ( arabicCharUnicodeRange.test(str) )
    {
      return true;
    }

    return false;
  });
}

// call this function on a field
restrictInputOtherThanArabic($('#firstnameAr'));

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接