2014-12-07 72 views
0

我的應用程序中有一個字段,用戶可以輸入hashtag。 我想驗證他們的條目,並確保他們輸入什麼是合適的HashTag。 它可以在任何語言和它應該不是前面帶#號。 我正在用JavaScript編寫。用於匹配任何語言的HashTags的正則表達式

所以下面就是很好的例子:

  • Abcde45454_fgfgfg(好,因爲:只有字母,數字和_)
  • 2014_is-的一年(好,因爲:字母,數字,_和 - )
  • בר_רפאלי(好,因爲:只有字母和_)
  • арбуз(好,因爲:只有字母)

而且FOLL由於是壞的例子:

  • 丹·布朗(壞,因爲有一個空格)
  • OMG !!!!! (不好,因爲有!)
  • בררפ@לי(壞,因爲有@和空格)

我們有匹配只有-ZA-Z0-9一個正則表達式,我們需要添加語言支持等等我們改變它忽略空格,忘記忽略特殊字符,所以我在這裏。

一些其他StackOverflow的例子我看到了,但對我沒有工作:

  1. Other languges don't work
  2. Again, English only

[編輯]

  • 新增的解釋,爲什麼不好就是不好好不錯
  • 我不想要前面的#字符,但是如果我想在開頭添加#,它應該是一個有效的標籤
    • 基本上我不想允許任何特殊字符,比如@ @#$ %^ & *()= +/[{]} ;:'「> <
+0

不好的例子不包含'#'。那麼究竟是什麼你禁止的字符? – Leo 2014-12-07 13:17:45

+0

編輯我的問題添加解釋和一些更多的信息。 謝謝! – AlexD 2014-12-07 13:29:10

+0

所以'#'前導是允許的,儘管你不喜歡,而其他地方的'#'是被禁止的,那是不是? – Leo 2014-12-07 13:34:41

回答

1

如果不允許的字符列表是透徹([email protected]#$%^&*()=+./,[{]};:'"?><),那麼正則表達式是:?

^#?[^\[email protected]#$%^&*()=+./,\[{\]};:'"?><]+$ 

Demo

這允許可選的前導#符號:#?。它不允許使用負面字符類的特殊字符。我剛剛添加了\s到列表(空格),並且我逃過了[]

不幸的是,你不能在JavaScript的正則表達式中使用像\p{P}(Unicode標點符號)這樣的結構,所以如果regex解決方案不夠好,你基本上必須黑名單字符或採取不同的方法。

+0

由於OP與(擴展的)ASCII集之外的字符相匹配,因此您的建議將匹配該集之外的許多特殊字符(由OP授予,由其定義)。 – 2014-12-07 14:06:33

+0

@當然,我在最後一段中提到了這一點。我能想到的唯一的JS正則表達式解決方案將需要添加Unicode範圍(如'[\ u2000- \ uF>''')。這留給OP的練習;) – 2014-12-07 14:12:11

+0

是的,這是一個很好的補充你的答案。 +1 – 2014-12-07 14:14:11