2012-04-13 7 views
1

Я использовал preg_match для проверки на стороне сервера, но также хочу иметь клиентскую сторону.Как использовать match() для белого списка символов?

Для моего PHP я допустить, чтобы эти символы:

'/^[A-Za-z][a-zA-Z0-9 .:-,!?]+$/' 

Как бы сделать белый список символов с match() в JavaScript?

EDIT:

Я попытался это, но он не работает по какой-то причине:

Мой отладчик говорит, прямо перед тем, если заявление:

218SyntaxError: Invalid regular expression: range out of order in character class

$('#title').blur(function(){ 
     input = $('#title').val(); 
     var invalidChars = /^[^a-z][^a-z\d .:-,!?]+$/i; 
    if (!invalidChars.test(input)){ 
     alert('true');  
     } 
     else { 
      alert('false'); 
      } 
}); 
+0

Из любопытства, для чего это валидация? (Какие данные у вас есть, которые должны начинаться с буквы, но затем можно следовать с такими разнообразными данными, что позволяет пробел или восклицательный знак, но не подчеркивание?) – Phrogz

+0

Привет, спасибо за ваш ответ. Это название объявления, пользователь должен публиковать сообщения. Я пытаюсь использовать коды прямо сейчас. С уважением – eric01

ответ

2
var validChars = /^[a-z][a-z\d .:\-,!?]+$/i; 
if (validChars.test(myText)){ ... } 

Использование regex.test(str) немного более результативно, чем str.match(regex), если вы хотите только знать, существует ли совпадение.

В качестве альтернативы, вы можете рано, если вы видите какой-либо недопустимый символ:

var invalidChars = /^[^a-z][^a-z\d .:\-,!?]+$/i; 
if (!invalidChars.test(myStr)){ 
    // we passed 
} 

Это позволяет тест регулярного выражения, чтобы остановить момент, когда он видит, неразрешенный символ.

+0

Привет Спасибо за ваш ответ. Я опубликовал редактирование моего кода. Пожалуйста, дайте мне знать, если вы знаете, что не так. Большое спасибо – eric01

+0

Woops; предполагая, что вы имели в виду буквальный дефис в своем втором наборе символов, вам нужно сбежать от него (или использовать его как последний элемент в наборе). Я отредактировал свой код соответствующим образом. – Phrogz

+0

Это работает, спасибо большое! С уважением – eric01

2

Try следующие

var text = ...; 
if (text.match(/^[A-Za-z][a-zA-Z0-9 .:-,!?]+$/)) { 
... 
} 
+0

Привет, спасибо за ваш ответ. Дефис вызывал проблему в этом коде, но после выхода из него он теперь работает. Большое спасибо – eric01

2

На самом деле все наоборот:

var regexp = /^[A-Za-z][a-zA-Z0-9 .:-,!?]+$/; 

if (regexp.test(text)) { 


} 
+0

Привет, спасибо за ваш ответ. Дефис вызывал проблему в этом коде, но после выхода из него он теперь работает. Большое спасибо – eric01

+0

Вместо того, чтобы сбежать из дефиса, поместите его в самый конец класса [], например: [a-zA-Z0-9.:,!? -] Таким образом, это не будет рассматриваться как оператор диапазона. –

3

все вышеперечисленные ответы верны, хотя только побочный примечание: вместо того, чтобы писать [A-Za-z], простой /[a-z]/i будет достаточно. i является флагом без регистра ...

+0

Привет, спасибо за отзыв! С уважением – eric01

Смежные вопросы