Измените свое регулярное выражение на:
^(?=.*[A-Z])(?=.*[a-z])(?=.*\d)[A-Za-z\d@$!%*#?&]{6,}$
, не забывая флаг g
.
При использовании: (?=.*[A-Za-z])
оно пройдет, если пользователь введет только заглавные или строчные буквы.
При использовании: (?=.*[@$!%*#?&])
требуется, чтобы пользователь вводил какой-то специальный символ.
var pass = 'TestString123';
// Minimum six characters, at least one uppercase letter, one lowercase letter and one number
var reg = new RegExp(/^(?=.*[A-Z])(?=.*[a-z])(?=.*\d)[A-Za-z\d@$!%*#?&]{6,}$/g);
if (reg.test(pass)) {
alert(1);
} else {
alert(2);
}
Управление, когда Ваши метаданные сделаны доступными, отличается между этими двумя языками.
Java обеспечивает java.lang.annotation. Хранение аннотация и java.lang.annotation. Перечисление RetentionPolicy для управления, когда метаданные аннотации доступны. Выбор варьируется от Runtime
(наиболее распространенный - метаданные аннотации, сохраненные в файлах класса), к Source
(метаданные, отброшенные компилятором). Вы отмечаете свой пользовательский интерфейс аннотации с этим - например:
@Retention(RetentionPolicy.RUNTIME)
@Target(ElementType.CLASS)
public @interface TraceLogging {
// etc
}
позволил бы Вам размышлять над своим пользовательским TraceLogging
аннотация во времени выполнения.
C# использует атрибут ConditionalAttribute , который управляется от символов времени компиляции. Таким образом, аналогичный пример в C#:
[Conditional("TRACE")]
public class TraceLoggingAttribute : Attribute
{
// etc
}
, который заставил бы компилятор выкладывать метаданные для Вашего пользовательского TraceLogging
атрибут, только если TRACE
символ был определен.
метаданные атрибута нбар доступны во времени выполнения по умолчанию в C# - это только необходимо, если Вы хотите изменить это.
Один важный аспект аннотаций Java, на которые я еще не посмотрел подробно: можно написать код, который использует аннотации в javac (с Java 6, я верю) как форма метапрограммирования .
PostSharp позволяет что-то подобное по общему признанию.
(Это далеко от единственной разницы, но это - все, которое у меня есть время для прямо сейчас.)
Одно интересное различие - то, что C# позволяет атрибуты уровня ассемблера и модуль. Они применяются к Вашему модулю или блоку и доступны через отражение нормальным способом. Java не обеспечивает отражение о файле банки, таким образом, аннотации уровня банки не возможны.
На самом деле это довольно распространено как Visual Studio файл, названный AssemblyInfo.cs
на корневом уровне проекта, который содержит, например:
[assembly: AssemblyVersionAttribute("1.2.3.4")]
[assembly: AssemblyTitleAttribute("My project name blah blah")]
...
нет никакой эквивалентной аннотации уровня банки в Java (хотя с тех пор jdk5, существует немного используемого механизма аннотации уровня пакета - благодаря mmeyers для указания что одно)
Развитие к тому, что сказал Jon...
И Java 5 и Java 6 позволяют метапрограммирование. Java 5 использует отдельный способный инструмент; Java 6 интегрирует его в компилятор. (Хотя склонный Java 5 все еще доступен в Java 6)
, К сожалению, каждый использует различный API.
я в настоящее время использую Java 5 API для своих Бобовых аннотаций
, См. http://code.google.com/p/javadude/wiki/Annotations для примера (ПРИМЕЧАНИЕ: я в настоящее время делаю некоторые основные обновления, некоторые из которых изменяют API.)
Очень интересный материал... - Scott